在文本文件

时间:2017-08-26 08:03:34

标签: bash command-line

例如

我有一个文本文件animal.txt,其中包含:

bird
bird
dog
rabbit
dog
cat
rabbit
dog
bird
cat
bird
bird
enter code here

我想有一些脚本可以给我这个结果:

$ ./program.sh animals.txt
bird 5
cat 2
dog 3
rabbit 2

注意:结果不需要采用这种格式。

我认为编写一些简单的程序来将单词读入数组然后手动计算它们的出现次数并不难,但我在这里要求你对这个问题采取更加“快速和肮脏”的方法。

感谢所有的回答者。对我来说,最佳解决方案就在这里:

cat animals.txt | sort | uniq -c – 

来自@cnicutar

2 个答案:

答案 0 :(得分:2)

简单 uniq + 排序 + awk 管道:

uniq -c <(sort animal.txt) | awk '{print $2,$1}' 

输出:

bird 5
cat 2
dog 3
rabbit 2

我还建议您使用另一个名为GNU datamash的优秀工具:

datamash -s -g1 count 1 <animal.txt

输出(标签\t分隔):

bird    5
cat 2
dog 3
rabbit  2

答案 1 :(得分:1)

尝试在awk中关注。

解决方案1:如果您需要输出与Input_file的顺序相同,那么以下内容可能有所帮助。

awk '!a[$1]{b[++i]=$1} {a[$1]++} END{for(j=1;j<=i;j++){print b[j],a[b[j]]}}'  Input_file

解决方案第二:如果您不打扰他们的输出订单,那么以下内容可能会对您有所帮助。

awk '{a[$1]++} END{for(i in a){print i,a[i]}}'   Input_file