从包含时间戳的文件中删除重复行

从包含时间戳的文件中删除重复行

问题/答案有一些很好的解决方案用于删除文件中的相同行,但在我的情况下不起作用,因为否则重复的行有时间戳。

是否可以告诉 awk 在确定重复项时忽略行的前 26 个字符?

例子:

[Fri Oct 31 20:27:05 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:10 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:13 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:16 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:21 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:22 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:23 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:24 2014] The Brown Cow Jumped Over The Moon

会成为

[Fri Oct 31 20:27:24 2014] The Brown Cow Jumped Over The Moon

(保留最近的时间戳)

答案1

你可以只使用uniq它的-f选项:

uniq -f 4 input.txt

man uniq

  -f, --skip-fields=N
       avoid comparing the first N fields

实际上这会显示第一行:

[Fri Oct 31 20:27:05 2014] The Brown Cow Jumped Over The Moon

如果这是一个问题,你可以这样做:

tac input.txt | uniq -f 4

或者如果您没有tac但有您的tail支持-r

tail -r input.txt | uniq -f 4

答案2

awk '!seen[substr($0,27)]++' file

答案3

试试这个:

awk -F ']' '{a[$2]=$1}END{for(i in a){print a[i]"]"i}}'

答案4

人们可以使用 的幂vim

:g/part of duplicate string/d

好简单。如果您还有更多文件(例如 gzipped旋转的日志),vim将打开它们,而无需您进行任何初步解压缩,您可以通过按:和重复最后一个命令。就像在终端中重复最后一个命令一样。

相关内容