我有这样的文本文件:
i
am
fine
how
are
you
what
i
how
are
我需要一个如下输出:
i : 2
am : 1
fine : 1
how : 2
are : 2
you : 1
what : 1
可能会有很多重复的词: 我怎么能用shell脚本或awk做到这一点?
答案 0 :(得分:4)
sort | uniq -c
它对它进行排序,默认情况下,计数在该行之前。那会有用吗?
答案 1 :(得分:1)
awk '{ count[$1]++ }
END { for (a in count) printf("%s : %d\n", a, count[a]) }' filename
awk
具有关联数组,并且所有变量都初始化为0,因此上述工作按预期工作。
答案 2 :(得分:0)
@OP,如果你想保留订单
awk ' { a[$0]++; d[NR]=$0 }
END{
for(i=1;i<=NR;i++){
if( ! (d[i] in p) ){
print a[d[i]],d[i]
p[d[i]]
}
}
} ' file
输出
$ ./shell.sh
2 i
1 am
1 fine
2 how
2 are
1 you
1 what
答案 3 :(得分:-1)
Perl:
perl -le'while (<>){ chomp; $seen{$_}++}; print map { $_ . " : " . $seen{$_} } keys %seen'