我有一个文本文件,其中有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第二、第三、第四和第五栏是常数和重复。
变量为第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这样的工具解决这些问题。
发布于 2018-04-03 07:22:15
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发布于 2018-04-03 03:23:22
尝试使用last_seen变量和数组。
https://stackoverflow.com/questions/49621457
复制相似问题