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

ただし、列の同じユーザーの内容をマージするのではなく、列のすべてのユーザーと各行にその内容を印刷します。

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?

おすすめ記事