用于汇总连接文件中频率的命令行

时间:2013-09-20 15:40:58

标签: sorting count command-line-arguments

我需要总结几个大的制表符分隔文件的一列的频率。 文件中的内容示例如下:

Blue    table   3 
Blue    chair   2 
Big cat 1 
Small   cat 2

连接文件后,麻烦如下:

第2列基本上是第0列和第1列的组合在一起的次数的频率计数。

我需要在连接文件的第2列中添加所有相同组合的频率。

例如:如果在文件A中,内容如下:

Blue    table   3
Blue    chair   2
Big cat 1
Small   cat 2

,在文件B中,内容如下:

Blue    table   3
Blue    chair   2
Big cat 1
Small   cat 2

连接文件C中的内容如下:

Blue    table   3
Blue    chair   2
Big cat 1
Small   cat 2
Blue    table   3
Blue    chair   2
Big cat 1
Small   cat 2

我想将文件D中第0列和第1列中所有相同组合的频率相加,得到以下结果:

Blue    table   6
Blue    chair   4
Big cat 2
Small   cat 4

我尝试使用以下命令对信息进行排序和计数:

 sort <input_file> | uniq -c <output_file>

但结果如下:

  2 Big cat 1
  2 Blue    chair   2
  2 Blue    table   3
  2 Small   cat 2

有没有人建议终端命令可以产生我想要的结果?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你很亲密;你有你需要的所有数字。每行的总数是从uniq(第1列)乘以频率计数(第4列)得到的行数。你可以用awk来计算:

sort input.txt | uniq -c  | awk ' {  print $2 "\t" $3 "\t" $1*$4 } '