【发布时间】:2016-09-27 23:28:42
【问题描述】:
我有一个输入数据,例如:
chr17 41243232 41243373 BRCA1_ex11
chr17 41243232 41243373 BRCA1_ex12
chr17 41243471 41243644 BRCA1_ex11
chr17 41243639 41243811 BRCA1_ex11
chr13 32954112 32954208 BRCA2_ex23
chr13 32954112 32954208 BRCA2_ex24
我需要检查重复行$2和$3行,如果重复,我需要合并成一行,$4列打印为逗号分隔。
输出:
chr17 41243232 41243373 BRCA1_ex11,BRCA1_ex12
chr17 41243471 41243644 BRCA1_ex11
chr17 41243639 41243811 BRCA1_ex11
chr13 32954112 32954208 BRCA2_ex23,BRCA2_ex24
是否有任何 AWK 解决方案可以轻松处理此类数据?我将不胜感激解释的解决方案。输入和输出是制表符分隔的格式。注意:第一个、第二个和第三个字段是相等的。
我的尝试是:
awk -v OFS="\t" '{i=$2 FS $1 FS $3 FS $4} {a[i]=!a[i]?$4:a[i] "," $4} END {for (l in a) {print l,a[l]}}' infile
感谢您的任何想法。
【问题讨论】:
-
如果第一个字段不同而第二个和第三个字段相等怎么办?你有没有自己尝试过什么?
-
@JamesBrown 谢谢你的好问题。第一个字段与第二个和第三个字段相同。是的,我试图在 awk 中排列数组 - 但仍在自学。我将编辑我的帖子..
标签: bash awk sed duplicates