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 和 cut 語句,但都沒有成功。我想找到一個 awk oneliner,但 sed 可能是更好的解決方案。對於以這種方式進行剪輯,我對其中任何一個都不太了解。

注意:這是一個範例,我需要刪除的時間戳部分不會相同,因為我需要對具有不同時間戳記的多行執行此操作。

答案1

最簡單的方法awk可能是對第一個空格分隔的欄位進行正規表示式替換,替換從句點到欄位末端的所有內容:

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

答案2

我會使用 awk

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

將定位第一個欄位(以空格分隔)並蒐索 .接下來是6個數字並將其清空。

答案3

與 GNUsed

sed -r 's/^([^.]+)\.[0-9]+ /\1 /' filename
  • ^([^.]+)捕獲起始字串直到第一個點字符
  • \.[0-9]+匹配點字符後面跟超過 1 位數字字符

如果字元數與範例中給出的一致,

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

相關內容