입력은 다음과 같습니다.
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