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

相关内容