2017-08-26 70 views
1

例如列表相同的字和它们的出现号码的文本文件

我有一个包含一个文本文件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

+5

'cat animals.txt |排序| uniq -c' – cnicutar

+0

这正是我想要的。 – fronthem

+0

@cnicutar如果你能为它创建一个答案会很好 –

回答

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):下面太AWK

bird 5 
cat 2 
dog 3 
rabbit 2 
1

尝试。

解决方案1st:如果您需要的输出与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 
相关问题