计算文本行中的出现次数

时间:2016-04-12 20:54:53

标签: bash count uniq

有没有办法计算一行中某个值出现的频率?我的输入是制表符分隔的.txt文件。它看起来像这样(但有成千上万行):

  #N/A  14 13   #N/A    15 13   #N/A    14 13   13 15   14 13   15 14   14 15
    24 26   #N/A    24 22   #N/A    24 26   #N/A    24 26   24 22   24 22   24 26
    45 43   45 43   #N/A    #N/A    #N/A    43 45   45 43   #N/A    47 45   45 43

我想要这样或类似的输出。

 #N/A(3)  14 13(3)  15 13(1)  13 15(1)  15 14(1)  14 15 (1)
 24 26(4)  #N/A(3)  24 22(3)   
 45 45(4)  #N/A(4)  43 45(1)  47 45(1)

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

Perl解决方案:

perl -laF'/\t/' -ne '
    chomp; my %h;
    $h{$_}++ for @F;
    print join "\t", map "$_ ($h{$_})", keys %h
' < input
  • -a-F\t表示标签)上的每一行拆分为@F数组
  • -l为照片添加换行符
  • -n逐行读取输入行
  • chomp删除了最终换行符
  • %h是哈希表,键是@F的成员,值是计数

答案 1 :(得分:0)

awk救援!

$ awk -F'  +' -v OFS='  ' '{for(i=1;i<=NF;i++) if($i!="")a[$i]++; 
        for(k in a) printf "%s", k"("a[k]")" OFS; delete a; print ""}' file

#N/A(3)  14 13(3)  13 15(1)  15 13(1)  14 15(1)  15 14(1)
#N/A(3)  24 22(3)  24 26(4)
#N/A(4)  43 45(1)  45 43(4)  47 45(1)