我是一个文本文件,其格式为7列,格式为:
18030 AAJ51 FTO rs9939609 C__30090620_10 A T
18030 AAJ51 CAT rs1001179 C__11468118_10 C C
18030 AAJ51 CCL2 rs1024611 C___2590362_10 G G
18030 AAJ51 TAS2R38 rs10246939 C___9506826_10 C C
20287 AAJ51 FTO rs9939609 C__30090620_10 A T
20287 AAJ51 CAT rs1001179 C__11468118_10 C C
20287 AAJ51 CCL2 rs1024611 C___2590362_10 A G
20287 AAJ51 TAS2R38 rs10246939 C___9506826_10 T T
第2列,第3列和第5列是常量并重复。
变量是第1列,第6列和第7列。
我想以这种方式转置数据:
FTO CAT CCL2 TAS2R38
rs9939609 rs1001179 rs1024611 rs10246939
18030 AT CC GG AT
20287 AT CC AG TT
虽然示例显示每个ID 4行(第一列中的5位数字是ID),但实际文件每个ID有128行,因此执行匹配或正则表达式是不实际的,并且更喜欢迭代的方法行数。
我在converting n number of rows上看到了这个示例,但我不确定如何修改此应用程序。
更新:CRLF结尾可能导致格式化问题,可以使用dos2unix等工具解决
答案 0 :(得分:2)
GNU Awk
解决方案:
awk '{
if (!keys[$3]++) { b[++c] = $3; row1 = row1 OFS $3; row2 = row2 OFS $4 }
line = groups[$1][$3];
groups[$1][$3] = (line == ""? $6$7: line OFS $6$7)
}
END{
print row1 ORS row2;
for (i in groups) {
r = i;
for (j in b) r = r OFS groups[i][b[j]];
print r
}
}' OFS='\t' file | column -txn
输出:
FTO CAT CCL2 TAS2R38
rs9939609 rs1001179 rs1024611 rs10246939
18030 AT CC GG CC
20287 AT CC AG TT
答案 1 :(得分:1)
尝试使用last_seen变量和数组。