我已经尝试了几个awk和sed命令以及GNU datamash来改变格式并将缺少的字段编码为" ??"这个数据文件没有成功。我有一个文件格式如下:
ind_1 SNP_1 AA
ind_1 SNP_2 AB
ind_1 SNP_3 AA
ind_2 SNP_1 AA
ind_2 SNP_2 AA
ind_3 SNP_1 AB
ind_3 SNP_2 AA
ind_3 SNP_3 AB
ind_3 SNP_4 AA
所需格式:
SNP_1 SNP_2 SNP_3 SNP_4
ind_1 AA AB AA ??
ind_2 AA AA ?? ??
ind_3 AB AA AB AA
我首先尝试使用GNU datamash
datamash --no-strict transpose < input1.txt
然后我尝试了这个awk:
awk '
!b[$1 FS $2]++{
a[++i]=$1 FS $2
}
{
c[$1 FS $2]=c[$1 FS $2]?c[$1 FS $2] FS $4:$4
}
END{
for(k=1;k<=i;k++){
print a[k],c[a[k]]
}}
' Input1_txt
答案 0 :(得分:0)
awk
救援!
使用真正的多维数组会更容易,但这适用于大多数awk
s
awk -v OFS='\t' '{vals[$1]; cols[$2]; a[$1,$2]=$3}
END {for(j in cols) printf "%s", OFS j;
print "";
for(i in vals)
{printf "%s", i;
for(j in cols) printf "%s", OFS (((i,j) in a)?a[i,j]:"??");
print ""}}