转置和取消堆叠

时间:2013-09-26 03:50:34

标签: awk

我正在尝试转置和取消堆叠一个巨大的文本数据库(制表符分隔)。

我的数据看起来像这样:

rs1 5   AB
rs2 5   BB
rs3 5   AA
rs1 6   BB
rs2 6   AA
rs3 6   AB
rs1 7   AA
rs2 7   AB
rs3 7   BB

我想把它变成:

    rs1 rs2 rs3

5   AB  BB  AA
6   BB  AA  AB
7   AA  AB  BB

非常感谢能够提供帮助的任何人。

卢卡

1 个答案:

答案 0 :(得分:0)

这是用gawk做到这一点的一种方法。看起来很痛苦,我相信有更好的方法可以做到这一点,但FWIW

awk -F'\t' 'BEGIN{PROCINFO["sorted_in"] = "@ind_str_asc"}; 
{arr[$1, $2] = $3; arr1[$1]; arr2[$2]};
END{
for(x in arr1){printf " "x;} {print ""};
for(y in arr2){printf y" ";for(x in arr1) printf " "arr[x, y]; print ""}
   }' input_file