私はこれを持っています:
2018:01:02-23:52:48
2018:01:02-23:52:48
2018:01:02-23:52:48
2018:01:03-09:26:20
2018:01:03-09:26:20
1日あたりのメッセージ数を並べ替えるために、日付ではなく時間を保持したいのですが。
2018:01:02
2018:01:02
2018:01:02
2018:01:03
2018:01:03
できればawk
でやりたい。
awk
awk -F- '$0=$1' file
切る
cut -d- -f1 file
sed
sed 's/-.*//' file
Perl
Perl -pe 's/-.*//' file
単にawk
で:
awk -F'-' '{ print $1 }' file
-F'-'
-扱います-
(ダッシュ)をフィールド区切り文字としてしかし、あなたの単純なケースでは、grep
アプローチはさらに単純になります:
grep -o '^[^-]*' file
入力onlyにタイムスタンプが含まれている場合、フィールド区切り記号としてダッシュを設定して、最初のフィールドのみを印刷するのは簡単です。
$ awk -F- '{print $1}' input
2018:01:02
2018:01:02
ただし、他にも何かある場合は、input2
含む
2018:01:02-23:52:48 some data
2018:01:02-23:52:48 something else
次に、残りの行を削除します。他の処理では、フィールドセパレーターも変更したくない場合があります。しかし、最初のフィールドで単純な置換を行い、結果の行を出力できます。
$ awk '{sub(/-.*/, "", $1)} 1' input2
2018:01:02 some data
2018:01:02 something else
Pythonで実行
#!/usr/bin/python
import subprocess
import re
h=open('filename','r')
for i in h:
print i.split('-')[0].strip()
出力
2018:01:02
2018:01:02
2018:01:02
2018:01:03
2018:01:03
以下のawkサブストリングメソッドで同じことを達成しました
awk '{print substr($1,1,10)}' filename
出力
2018:01:02
2018:01:02
2018:01:02
2018:01:03
2018:01:03
gNU awkより
$ awk 'BEGIN{FS="[:-]"} {print $1":"$2":"$3 }' file
または
$ awk 'BEGIN{FPAT="[0-9]+"}{print $1":"$2":"$3 }' file
上記の日付区切り文字の印刷をお好みに変更できます
$ awk 'BEGIN{FS="[:-]"}{print $1"/"$2"/"$3 }' file
2018/01/02
2018/01/02
2018/01/02
2018/01/03
2018/01/03