【发布时间】:2020-06-30 12:26:43
【问题描述】:
我有许多大型 .tsv 文件,如下所示:
rownbr pos pvalue percentage samplename
1 chr1_12000 0.05 5.6 S1
1 chr1_12500 0.04 15.9 S1
3 chr1_12570 0.9 45.3 S2
2 chr1_12500 0.03 13.8 S3
我想根据 pos 列删除重复的行,同时仍保留列 3 和 5 两行的值以便输出看起来像这样:
rownbr pos pvalue percentage samplename
1 chr1_12000 0.05 5.6 S1
1 chr1_12500 0.04,0.03 15.9 S1,S3
3 chr1_12570 0.9 45.3 S2
我的想法是首先使用 shell sort 函数对 .tsv 文件进行排序:
sort -k 2,2 *.tsv
然后编写一个脚本,将每一行与下一行进行比较。 如果 pos 列中的字符串对于两行都是相同的,那么它将连接 row n+1 中的第 3 列和第 5 列的值到 中的值>第n行。 但是我不知道该怎么做。
我熟悉 awk/sed/grep/bash,但也有一些(有限的)perl 基础知识。
感谢您的帮助!
【问题讨论】:
-
在预期输出中:为什么 pos=12500
15.9而不是13.8的百分比列?同样,为什么rownbr列是1而不是2。对于给定的pos,是否可以有超过 2 个重复行?
标签: bash perl duplicates