awk - 求和或排序

标签 awk grep

我有一个数据文件,例如:

82 DEX26_28_h
82 DEX26_28_h
873 DEX34_h
89 DEX37_h
1 DEX34_h

我打算通过 $2 进行排序,以便列中的每个项目(17 个唯一项)彼此相邻。然后我想总结 $1 中的所有 #,同时绑定(bind)到 $2

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

164 DEX26_28_h
874 DEX34_h
89 DEX27_h

有道理吗?基本上需要对每个样本($2)发生的序列总数($1)求和,而 uniq 只需要 $2,同时保持总和。这样最终结果就变成了总共17行。

我是否应该只用 grep 找出 $2 中的 17 个标识,然后使用 awk 将它们求和?

大家觉得怎么样?

最佳答案

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

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

然后您可以通过管道对其进行排序。


它的作用:

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

  • END...:在处理结束时执行一次

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

  • print arr[i],i:首先打印带有键iarr中的值,然后打印键 >i 本身。

关于awk - 求和或排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092263/

相关文章:

awk - Gawk 和 systime()

bash - 如何在另一个命令中使用 awk 的输出?

grep - 关于 'grep -f' : match pattern with file

Python 发出的 grep 正则表达式,匹配此模式

regex - awk regex 我怎样才能匹配或捕获这个字符串

bash - 使用 awk 解析日志文件

shell - sed:同一输出行上的多个模式

json - 使用 awk 从较大的 JSON 字符串中提取标记

linux - 使用通配符和 grep

python - 如何将 awk 的值存储在 Python 变量中