从Linux中的文件中获取最常见的出现行


Answers:


21

您可以使用内置命令轻松完成此操作。

  • 馈送文件的内容sort。下一步需要这个。
  • 这去了uniq -c。它将计算每行的唯一出现次数。如果相似的线不相邻,那么如果不先进行排序就无法工作。
  • 然后,将其提供给另一个sort,后者现在以相反的顺序(r)并根据输出的数字(n)解释进行排序uniq。我们需要数字选项,因为否则,数字前面的空格会导致错误的结果(有关更多信息,请参见GNU sort的帮助)。
  • 最后,仅显示带有的前十二行head

该命令将是:

sort test.txt | uniq -c | sort -rn | head -n 12

此处的输出包含实际发生的次数。

要仅获取原始行列表,可以将输出传递给sed

sort test.txt | uniq -c | sort -rn | head -n 12 | sed -E 's/^ *[0-9]+ //g'

例:

I'm not there very often
I'm not there very often
Look at me!
Look at me!
Look at me!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!

第一个命令的输出,但只能从中选择2个head

6 Hello there!
3 Look at me!

第二个命令的输出:

Hello there!
Look at me!

1
您必须先对其进行排序,然后再使用uniq
赛勒斯

@slhck:谢谢!一个问题:sort -rn使用由产生的每一行旁边的数字作为排序字段,以相反的顺序进行排序uniq -c?我认为k1将使用类似的东西
Jim

@Jim完全正确。r反转,并n根据产生的数字进行数字排序uniq。你到底是什么意思k1
slhck 2012年

@slhck:我试图使用找出这些命令,man并且我了解-k必须使用某种语法来选择要进行排序的字段
Jim

@cYrus:事先需要排序的最极端情况是什么?
吉姆(Jim)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.