使用bash只打印文件中的某些行

时间:2014-10-30 03:02:58

标签: linux bash networking

我正在尝试浏览一些日志文件,需要从中剪切数据以便在其他软件中使用。日志文件如下所示:

Oct2614 status:ok 0.86.50.86
Oct2614 status:ok 0.111.122.11
Oct2714 status:ok 0.21.24.111
Oct2814 status:ok 0.15.121.12
Oct2814 status:ok 0.61.51.25

(IP addresses not real)

我想每天仅打印一个状态代码,因此我如何打印,例如Oct2614 status:ok 0.86.50.86并忽略第二个实例Oct2614 status:ok 0.111.122.11?使用bash是最好的,这样我就可以简单地制作一个.sh并在多个地方使用它。

我尝试过使用grep 'Oct2614' | uniq,但我不熟悉bash命令。

2 个答案:

答案 0 :(得分:2)

awk '{if (a[$1]++==0) print $0}' file.txt

答案 1 :(得分:1)

如果日期总是相同的字符数,请使用uniq -w隐藏前7行与前一行相同的行:

$ uniq -w7 log.txt
Oct2614 status:ok 0.86.50.86
Oct2714 status:ok 0.21.24.111
Oct2814 status:ok 0.15.121.12

如果您要搜索特定日期的第一个条目,请尝试使用grep -m来限制匹配数量:

$ grep -m1 '^Oct2614'
Oct2614 status:ok 0.86.50.86