计算字符串的出现次数

use*_*485 6 text-processing

作为输入,我们有一些字符串 id。我们如何计算哪个标识符出现最频繁以及出现了多少次?

例子

输入:

cat 
dog 
cat
dog
dog
dog 
dog 
fly
spider
spider
cat
cat
Run Code Online (Sandbox Code Playgroud)

输出:

dog 5
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 11

您可以使用命令 sort&uniq -c来计算所有字符串的出现次数,如下所示:

$ sort sample.txt | uniq -c
      4 cat
      5 dog
      1 fly
      2 spider
Run Code Online (Sandbox Code Playgroud)

如果你只想要一个字符串“狗”,你可以grep在之前或之后使用。

$ sort sample.txt | uniq -c | grep dog
      5 dog
Run Code Online (Sandbox Code Playgroud)

$ grep dog sample.txt  | uniq -c
      5 dog
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

该命令uniq -c将计算它显示的所有唯一字符串,但列表需要先按排序顺序。这就是为什么我们sort在进行计数之前使用该命令的原因。

该命令grep用于在输出中选择感兴趣的内容。您可以将其grep视为一个过滤器,它可以根据您希望从输出中获得的内容来包含或单独地起作用。

sort命令可以根据规则对数据进行排序。在这种情况下,我们让它在默认模式下运行,因此它根据一组字母数字排序规则对数据进行排序。


Hau*_*ing 8

如果您只查找一个字符串:

grep -cxF dog
Run Code Online (Sandbox Code Playgroud)

或者

echo "dog: $(grep -cxF dog)"
Run Code Online (Sandbox Code Playgroud)

完整列表的有效解决方案:

> awk '{a[$0]++}; END {for (val in a) print val ": " a[val];}' file
spider: 2
cat: 4
fly: 1
dog: 5
Run Code Online (Sandbox Code Playgroud)

  • `sort` 批量保存在临时文件中,以避免填满内存。它可能会填满 tmp 文件系统,但不会削弱系统。 (3认同)

Cre*_*eek 2

重新排列数据并sort使用uniq -c

sort < input.txt | uniq -c
Run Code Online (Sandbox Code Playgroud)