使用UNIX命令计算单行中不同字符串的数量

时间:2013-12-26 18:08:19

标签: unix

我正在寻找一种解决方案,使用unix命令计算单行中不同字符串的出现次数。

说,我有一个文件x.log,文件中的内容是:

2013.12.25 Can you provide me a solution to the question
Hello World how are you
2013.12.25 Can I ask a question
2013.12.26 Can you provide me a solution to the question
Hello World how are you
2013.12.26 Can I ask a question

该命令应该计算字符串“Can”和“question”的出现次数,并为我提供输出

2013.12.25 4
2013.12.26 4

2 个答案:

答案 0 :(得分:1)

tr -s ' ' '\n' < file | sort | uniq -c | sort -n

tr将所有空格转换为换行符。这将为每行提供一个单词。然后我们对它进行排序并通过uniq管道以获得频率计数,最后,我们按频率排序。

答案 1 :(得分:1)

awk非常适合此类查询。

  • 对于第一个文件中的每一行(使用NR == FNR idiom),脚本将该单词(我假设每行一个单词)存储为wordlist数组的索引之一。
  • 对于第二个文件中的每一行,它为每个字段(当然不包括第一个字段)递增count数组(由每行的第一个字段索引),以匹配{{1中的任何单词}}。
  • 最后,打印出wordlist数组

[我查看了你未经编辑的问题,以确认每个Hello World系列实际上应该是前一行的一部分。]

count