awk はフィールドの一部を切り取り、まだ行全体を印刷します。

awk はフィールドの一部を切り取り、まだ行全体を印刷します。

私は次の行を持っています:

08:30:02.480507 IP 192.168.100.150.65119 > 192.168.100.151:53 59865 [1au] A? click.em.redbox.com. (48)

タイムスタンプから「.480507」を削除する必要があるため、行は次のようになります。

08:30:02 IP 192.168.100.150.65119 > 192.168.100.151.53: 59865 [1au] A? click.em.redbox.com. (48)

私は成功せずにいくつかの厄介で切り捨てられたステートメントをたどりました。 awk onelinerを探したいのですが、sedはより良い解決策かもしれません。このように編集することについてはわかりません。

注:これは例です。削除する必要があるタイムスタンプ部分は、タイムスタンプが異なる複数の行に対してこれを行う必要があるものと同じではありません。

答え1

最も簡単な方法awkは、スペースで区切られた最初のフィールドで正規表現を置き換えることで、ピリオドからフィールドの終わりまですべてを置き換えることです。

awk '{sub(/\..*/,"",$1)}1' somefile

答え2

私はawkを使用します

awk --posix '{ gsub(/\.[[:digit:]]{6}/, "", $1); print }' filename

最初のフィールド(スペースで区切り)を見つけて検索します。以下は6つの数字です。

答え3

GNUと共にsed

sed -r 's/^([^.]+)\.[0-9]+ /\1 /' filename
  • ^([^.]+)開始文字列を最初のドット文字までキャプチャ
  • \.[0-9]+1つ以上の数字が後に続くドット文字と一致します。

例のように文字数が与えられると、

sed -r 's/^(.{8}).{7} /\1 /' filename

関連情報