合并文件中的列

合并文件中的列

我需要对某些数据进行一些格式调整,我不确定是否有一种简单的方法可以进行更改。我需要将两列数据合并为一列,并在两个数据点之间使用“/”。

输入

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

相关内容