我需要对某些数据进行一些格式调整,我不确定是否有一种简单的方法可以进行更改。我需要将两列数据合并为一列,并在两个数据点之间使用“/”。
输入
Known Mother
5 babies
3 Loci
Mom 314 322 249 261 342 346
2_1_2011 314 314 249 257 342 346
2_17_2011 314 314 257 261 346 346
2_26_2011 314 314 257 261 342 346
2_30_2011 314 314 257 261 342 342
2_5_2011 314 314 249 257 342 342
所需输出
Known Mother
5 babies
3 Loci
Mom 314/322 249/261 342/346
2_1_2011 314/314 249/257 342/346
2_17_2011 314/314 257/261 346/346
2_26_2011 314/314 257/261 342/346
2_30_2011 314/314 257/261 342/342
2_5_2011 314/314 249/257 342/342
这些文件包含的数据比上面示例中显示的数据更多,共有 144 个文件。任何有关如何在不手动进行 Excel 编辑的情况下进行上述修改的建议将不胜感激。
答案1
这个问题有两个部分:
- 确定哪些行需要按照您描述的方式进行转换:例如,“有 7 列的行”
- 执行转换
这是使用 Awk 执行此操作的一种方法:
awk 'NF == 7 { print $1, $2 "/" $3, $4 "/" $5, $6 "/" $7 }
NF != 7 { print }' input.txt
输出:
Known Mother
5 babies
3 Loci
Mom 314/322 249/261 342/346
2_1_2011 314/314 249/257 342/346
2_17_2011 314/314 257/261 346/346
2_26_2011 314/314 257/261 342/346
2_30_2011 314/314 257/261 342/342
2_5_2011 314/314 249/257 342/342
答案2
统一Awk
解决方案:
awk 'NR<4;
NR>3{
printf "%s\t",$1;
for (i=2; i<NF; i+=2) printf "%s/%s%s", $i, $(i+1), (NF-i==1? "":"\t");
print ""
}' file
输出:
Known Mother
5 babies
3 Loci
Mom 314/322 249/261 342/346
2_1_2011 314/314 249/257 342/346
2_17_2011 314/314 257/261 346/346
2_26_2011 314/314 257/261 342/346
2_30_2011 314/314 257/261 342/342
2_5_2011 314/314 249/257 342/342