我正在尝试从两个时间戳(第 8 列和第 9 列)中删除毫秒数
1 20 2 14000 14000 11 1 10:11:56.136 10:11:56.136 0 1
我一直在使用以下 sed 命令来删除它们:
sed 's/\(:[0-9][0-9]\)\.[0-9]\{3\}/\1/g'
这非常有效。但是我注意到在我的文件中还有其他时间戳,其中只有两毫秒,有些只有一毫秒:
**10:46:27.93 10:46:27.90** and some with only one millisecond 10:46:2 10:46:2
我再次运行我的 sed 命令,以便在我删除了三毫秒的文件上删除两毫秒。像这样:
sed 's/\(:[0-9][0-9]\)\.[0-9]\{2\}/\1/g'
这工作正常,因为我看到它从时间中删除了两毫秒。
问题:
运行上述命令后,我发现它有时也会修改我的其他一些列。我没有包括我的所有专栏,因为它很难阅读。我有大约 40 列。我只想修改第 8 和 9 列。
问题
我怎样才能用一个命令处理所有三种情况。当我说三种情况时,我的意思是有两毫秒、一毫秒和三毫秒。此外,如何确保我仅修改第 8 列和第 9 列。
非常感谢任何帮助。谢谢!!!
最佳答案
只是 awk
的初学者,如果发现效率低下,我们深表歉意。
awk '{gsub(/\.[0-9]*/,"",$8);gsub(/\.[0-9]*/,"",$9);print}' file
将单独从第 8 列和第 9 列中删除毫秒值。逻辑很简单。
- 删除模式
之后的任何字符集。
后跟任意数量的数字
在行动中:-
$ cat file
1 20 2 14000 14000 11 1 10:11:56.136 10:11:56.136 0 1
$ awk '{gsub(/\.[0-9]*/,"",$8);gsub(/\.[0-9]*/,"",$9);print}' file
1 20 2 14000 14000 11 1 10:11:56 10:11:56 0 1
现在第 7 列更改为具有 .
值。看下面的 Action
$ cat file
1 20 2 14000 14000 11 1.1 10:11:56.136 10:11:56.136 0 1
$ awk '{gsub(/\.[0-9]*/,"",$8);gsub(/\.[0-9]*/,"",$9);print}' file
1 20 2 14000 14000 11 1.1 10:11:56 10:11:56 0 1
第 7 列保持不变。
关于regex - 从特定列的时间戳中删除毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37210019/