总结或排序

时间:2012-10-26 18:17:50

标签: awk grep

我有一个数据文件,如:

82 DEX26_28_h
82 DEX26_28_h
873 DEX34_h
89 DEX37_h
1 DEX34_h

我打算通过$ 2进行排序,以便列中的每个项目(17个uniques)彼此相邻。然后我想用$ 1总结所有#'同时拴在$ 2

上述测试文件的理想结果:

164 DEX26_28_h
874 DEX34_h
89 DEX27_h

有意义吗?基本上需要总结每个样本($ 2)发生的序列总数($ 1)和uniq只保留总和$ 2。这样最终结果就变成了17行。

我应该只用$ 2中的17个标识来表示,然后用awk对它们求和?

你们有什么想法?

1 个答案:

答案 0 :(得分:2)

您可以在awk中使用数组进行求和:

awk '{arr[$2]+=$1} END {for (i in arr) {print arr[i],i}}'

然后你可以把它管道进行排序。


这是做什么的:

  • arr[$2]+=$1:使用索引(键)$1arr的值添加到数组$2中的元素。 (以前未定义的元素很方便地定义为0,所以是的,你可以在这里做+=而不用担心密钥是否“存在”。)如果你不熟悉数组,这基本上是创建一个查找内存中的表格基于您的$2字段。

  • END...:在处理结束时执行此操作

  • for (i in arr):对于数组arr中的每个键,将该元素分配给i并运行以下块中的代码。

  • print arr[i],i:首先使用键arr打印i中的值,然后使用键i本身打印。