Reformatando uma tabela com o awk

0

Eu tenho que reformatar um número de tabelas muito longas da seguinte forma

Formato original :

John Smith,Jones,Taylor
Janet Williams,Brown,Wilson

Formato desejado :

John Smith
John Jones
John Taylor
Janet Williams
Janet Brown
Janet Wilson

Como posso fazer isso?

    
por Nasir 02.10.2015 / 11:38

3 respostas

2

com awk :

awk -F"[ ,]" '{for(i=2;i<=NF;i++){print $1,$i;}}' file
  • -F"[ ,]" : o delimitador está configurado para espaço e vírgula. Agora temos em $1 o primeiro nome e em $2 para o último campo os sobrenomes.
  • for(i=2;i<=NF;i++) : Faz um loop em todos os campos, começando pelo campo 2.
    • print $1,$i; : imprime o primeiro nome seguido do sobrenome.

A saída:

John Smith
John Jones
John Taylor
Janet Williams
Janet Brown
Janet Wilson
    
por 02.10.2015 / 11:46
1

tente

awk ' { n=split($2,A,",") ;
    for (i=1;i<=n;i++) printf "%s %s\n",$1,A[i] ;
} ' file

onde

  • split($2,A,",") dividirá o segundo campo com vírgula (,),
  • n= contará
  • for( ) fará um loop
  • A[i] é o nome atual (ou sobrenome)
  • printf "%s %s\n",$1,A[i] imprima isso juntos.
por 02.10.2015 / 11:48
1

com sed :

sed ':1;s/,/\n/;T;P;s/\S*\n//;t1' file
  • :1 mark ponto de retorno
  • s/,/\n/ s ubstitute primeira vírgula por n ewline
  • T se a substituição não foi executada (não há mais vírgulas na linha) para o final do script
  • P linha de impressão desde o início até n ewline
  • s/\S*\n// remove palavra ( \S* qualquer símbolo não vazio) com n ewline
  • t1 se a substituição for bem sucedida - retorne para 1 point

ou mais posix 'ly

sed ':1;s/,/\n/;/\n/P;s/\S*\n//;t1' file
    
por 02.10.2015 / 12:52