combina colunas dentro de um arquivo

0

Eu preciso fazer alguns ajustes de formatação em alguns dados e não tenho certeza se existe uma maneira simples de fazer as alterações. Eu preciso combinar duas colunas de dados em uma coluna com um "/" entre os dois pontos de dados.

Entrada

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

Saída desejada

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

Os arquivos contêm mais dados, em seguida, o que é mostrado no exemplo acima e há 144 arquivos. Quaisquer sugestões sobre como fazer as modificações acima sem manualmente fazer as edições no excel seriam muito apreciadas.

    
por Josh 17.12.2017 / 23:27

2 respostas

1

Existem duas partes para este problema:

  • Identifique quais linhas precisam ser transformadas da maneira que você descreveu: por exemplo, "as linhas com 7 colunas"
  • Executar a transformação

Aqui está uma maneira de fazer isso usando Awk:

awk 'NF == 7 { print $1, $2 "/" $3, $4 "/" $5, $6 "/" $7 }
     NF != 7 { print }' input.txt

Saídas:

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
    
por 17.12.2017 / 23:32
0

Solução unificada 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

A saída:

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
    
por 17.12.2017 / 23:44