$1과 일치하는 모든 단어를 온라인으로 인쇄하고 다른 단어는 인쇄하지 않는 방법은 무엇입니까?

$1과 일치하는 모든 단어를 온라인으로 인쇄하고 다른 단어는 인쇄하지 않는 방법은 무엇입니까?

입력은 다음과 같습니다.

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

나는 돌아오고 싶다:

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

감사해요.

답변1

해결책 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

더 읽기 쉽게 만들기 위해 기본 awk스크립트 부분은 다음과 같습니다.

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

답변2

Awk해결책:

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

산출:

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

답변3

그리고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

관련 정보