有没有办法计算一行中某个值出现的频率?我的输入是制表符分隔的.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)
感谢您的帮助。
答案 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
删除了最终换行符答案 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)