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

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

我有一个文本文件,每行包含多个单词。
如何找出文件中出现频率最高的 12 行并显示它们?
我不太擅长编写脚本命令。

如果我能得到命令和解释,以便我能够理解如何使用它并扩展我对命令的知识,那就太好了!

答案1

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

  • 输入文件内容sort。下一步我们需要它。
  • 这将转到uniq -c。它将计算每行的唯一出现次数。如果相似的行不相邻,则在未进行排序的情况下此方法将不起作用。
  • 然后,将其输入到另一个sort,现在该 以相反的顺序 ( r) 排序并基于输出n的数字 ( ) 解释uniq。我们需要数字选项,因为否则,数字前面的空格会导致错误的结果(请参阅GNUsort的帮助了解更多信息)。
  • 最后,只显示前十二行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!

答案2

如果你的发行版有日志顶部

cat your_file | logtop

如果您的文件不断增长,如日志文件,请尝试:

tail -f your_log | logtop

相关内容