Como imprimir uma condição de coluna específica usando o awk?

6

Eu tenho um arquivo de entrada:

A 123 name: 1 AAA  
B 123 name: 2 AAA name: 3 BBB  
C 234 name: 1 AAA name: 2 BBB name: 5 CCC 

Se a coluna for 'name:', desejo imprimir a próxima e a próxima coluna.

Este é o meu código awk:

cat input.txt | awk '{for(i=1;i<=NF;i++)if($i == "name:")print $(i+1),$(i+2)}'

Mas, neste caso, todas as colunas são listadas em uma linha como esta:

1 AAA  
2 AAA  
3 BBB  
1 AAA  
2 BBB  
5 CCC

Eu quero que as colunas sejam impressas assim:

1 AAA  
2 AAA 3 BBB    
1 AAA 2 BBB 5 CCC
    
por user2905046 24.01.2017 / 10:25

1 resposta

7

Basta substituir print por printf para imprimir o valor na mesma linha e inserir uma nova linha depois de terminar a iteração na linha:

awk '{{for(i=1;i<=NF;i++)if($i == "name:") printf $(i+1)" "$(i+2)" "} print ""; }' yourfile

A saída:

1 AAA 
2 AAA 3 BBB 
1 AAA 2 BBB 5 CCC
    
por 24.01.2017 / 10:52