我有一个包含 2N 行的多列文件,它由 0s、1s 和缺失数据(编码为“?”)组成。它看起来像这样:
1 0 0 ? 1 ?
1 ? 1 ? 1 1
1 0 1 ? 1 1
0 ? 0 1 0 ?
0 0 1 ? 0 0
0 0 0 ? 0 ?
0 ? 0 0 1 1
1 1 1 1 1 1
我想对每两行求和并输出一个 N 行文件。如果有“?” 连续然后输出应该是“?” 对于该特定字段 (?+0=?+1=?+? = ?)。因此,我的示例的输出将如下所示:
2 ? 1 ? 2 ?
1 ? 1 ? 1 ?
0 0 1 ? 0 ?
1 ? 1 1 2 2
我尝试了这段代码,但在计算时似乎将丢失的数据视为“0”。有没有办法将丢失的数据保留为“?” ?
cat <input_file> |awk -F ' ' '{if (NR%2==1){for(j=1;j<=NF;j++)array[j]=$j;}else{result="";for(i=1;i<=NF;i++){tmp=array[i]+$i;result=sprintf("%s%d ",result,tmp);}print result;}}' > <output_file>
请帮忙。任何建议将不胜感激!