次の列があります。
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?
答え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?