다음과 같은 열이 있습니다.
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?