我有几个以制表符分隔的文件,其中有几列。我想要计算文件夹中所有文件的列中不同值出现的频率,并按计数的降序进行排序(首先是最高的计数)。我如何在Linux命令行环境中实现这一点?
它可以使用任何常见的命令行语言,如awk、perl、python等。
发布于 2011-02-07 23:36:15
要查看第二列的频率计数(例如),请执行以下操作:
awk -F '\t' '{print $2}' * | sort | uniq -c | sort -nr
fileA.txt
z z a
a b c
w d e
fileB.txt
t r e
z d a
a g c
fileC.txt
z r a
v d c
a m c
结果:
3 d
2 r
1 z
1 m
1 g
1 b
发布于 2011-02-08 02:59:16
下面是在shell中实现这一点的方法:
FIELD=2
cut -f $FIELD * | sort| uniq -c |sort -nr
这是bash最擅长的事情。
发布于 2011-02-07 23:04:35
拼音(1.9+)
#!/usr/bin/env ruby
Dir["*"].each do |file|
h=Hash.new(0)
open(file).each do |row|
row.chomp.split("\t").each do |w|
h[ w ] += 1
end
end
h.sort{|a,b| b[1]<=>a[1] }.each{|x,y| print "#{x}:#{y}\n" }
end
https://stackoverflow.com/questions/4921879
复制相似问题