Como posso imprimir $ 1 e todas as palavras correspondentes na linha, mas não outras palavras?

0

A entrada é assim:

user1 : MPT_group1
user2 : MPT_group1 MPT_group3  MPT_group4 groupx groupy
user3 : MPT_group2 MPT_group3 groupn 

Eu quero voltar:

user1 : MPT_group1
user2 : MPT_group1 MPT_group3 MPT_group4
user3 : MPT_group2 MPT_group3

Obrigado.

    
por doneladio 23.03.2018 / 19:33

3 respostas

0

Uma solução awk :

$ awk '{printf "%s : ", $1; for( i=3; i<=NF; i++ ) { if( $i ~ /^MPT_group/ ) { printf "%s ", $i }  } print "" }' input
user1 : MPT_group1
user2 : MPT_group1 MPT_group3 MPT_group4
user3 : MPT_group2 MPT_group3

Para tornar isso mais legível, aqui está a parte do script awk :

{
   printf "%s : ", $1; 
   for( i=3; i<=NF; i++ ) { 
      if( $i ~ /^MPT_group/ ) { 
         printf "%s ", $i }
      } 
   print ""
}
    
por 23.03.2018 / 19:45
0

Awk solução:

awk '{ r=$1 OFS $2; for(i=3; i<=NF; i++) if ($i ~ /^MPT_group/) r=r OFS $i; print r }' file

A saída:

user1 : MPT_group1
user2 : MPT_group1 MPT_group3 MPT_group4
user3 : MPT_group2 MPT_group3
    
por 23.03.2018 / 19:45
0

com grep :

$ grep -Po '^\S*\s*: (MPT_group\d+\s*)+' infile
user1 : MPT_group1
user2 : MPT_group1 MPT_group3  MPT_group4
user3 : MPT_group2 MPT_group3
    
por 23.03.2018 / 19:56