awk를 사용하여 동일한 사용자와 관련된 특정 열의 내용만 인쇄하는 방법은 무엇입니까?

awk를 사용하여 동일한 사용자와 관련된 특정 열의 내용만 인쇄하는 방법은 무엇입니까?

다음과 같은 열이 있습니다.

User    ColumnA  ColumnB  ComumnC
abc123  hi       hello    howdy?
xyz123  Namaste  que paso rowdy?
abc123  hi       hello    bowdy?

다음과 같이 3열의 abc123과 관련된 내용을 인쇄하는 gawk 스크립트를 작성하고 싶습니다.

User: abc123
    howdy?
    bowdy?

지금까지 나는 이것을 얻었습니다 :

gawk '/^[a-z]{3}[0-9]{3}/ { 
    temp=$1
    printf ("User:  %s\n", $1); 
    printf ("\t %s\n", $4)
}' $1

그러나 이와 같이 C열에 있는 동일한 사용자의 내용을 병합하는 대신 C열에 있는 모든 사용자와 각 행에 해당 내용을 인쇄합니다.

User: abc123
    howdy?
User: xyz123
    rowdy?
User: abc123
    bowdy?

어떤 제안이 있으십니까?

답변1

사용 awk:

awk -F'\t' '
NR>1{
    if(!o[$1]) {o[$1]="User: "$1"\n\t"$4}
    else {o[$1]=o[$1]"\n\t"$4}
}
END { for (i in o) print o[i] }
' file

산출:

User:abc123
    howdy?
    bowdy?
User:xyz123
    howdy?

답변2

여기 있습니다:

# Save the filename
filen="test.txt"
# Save the column name
col_name="$(head -n1 $filen|awk '{print $1}')"
# Save the target word
to_find="abc123"
echo "$col_name: $to_find" ; for name in $(grep $to_find $filen | awk '{print $4}'); do echo "  $name"; done

텍스트 예:

User    ColumnA  ColumnB  ComumnC
abc123  hi       hello    howdy?
xyz123  Namaste  que paso rowdy?
abc123  hi       hello    bowdy?

산출:

User: abc123
  howdy?
  bowdy?

관련 정보