【发布时间】:2017-05-08 14:21:21
【问题描述】:
我想寻求帮助。这是文件格式:
contig001 10 1 10 0.0000 0.1234 0.1234
contig001 10 1 10 0.0000 0.1678 0.1987
contig001 10 1 10 0.0111 0.1211 0.1234
contig002 245 1 10 0.0000 0.1456 0.1670
contig002 245 1 10 0.1234 0.1111 0.1098
contig002 245 1 10 0.1113 0.1111 0.1099
contig002 300 1 10 0.1112 0.1871 0.1229
contig003 100 1 10 0.0000 0.1234 0.1234
如何修改此代码,以便它也可以获得具有相同 contig 编号和位置的条目的 $4、$5 和 $6 的平均值(在示例格式中分别以 $1 和 $2 表示):
$ awk '{sum[$2]+=$3; count[$2]++}
END{for(k in sum) printf "%s %.1f\n", k, sum[k]/count[k]}' file
(来自https://stackoverflow.com/a/37012455/6696551)
另外,如果“可折叠”条目的数量少于 5 个(不过,我在示例输入文件中只指出了 3 个),则不会计算平均值。
这是预期的 file.out(假设这里的值已经是平均值):
contig001 10 1 10 0.1982 0.1987 0.1223
contig002 245 1 10 0.0123 0.1324 0.1452
不是很相关(?)信息: 实际上,“重复项”来自 50 个文件的 cat-sort-uniq 命令组合(但是,我不知道如何删除少于 5 个的重复项)。最初,我会询问跨多个文件的 AWK-ing 以获得每列的平均值;但是,我认为折叠重复文件将比重复遍历每个文件更容易(尤其是 2 列 ID 复杂性)。
谢谢!
【问题讨论】:
标签: awk