重新排列列的元素和显示计数

时间:2010-02-01 06:21:07

标签: unix shell awk

我有这样的文本文件:

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做到这一点?

4 个答案:

答案 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'