我有一个包含3列和数千行的文件。以下是一个例子。
File.txt
Column1 column2 column3
173 banana red
896 banana red
567 apple green
742 apple green
893 apple green
567 avocado black
345 avocado black
我需要打印column1中的所有行,但只打印column2和column3中的唯一名称。
I want this output:
Column1 column2 column3
173 banana red
896
567 apple green
742
893
567 avocado black
345
如果我可以使用以下格式,那就更好了:
Banana-red: 173 896
Apple-green: 567 742 893
Avocado-black: 567 345
答案 0 :(得分:1)
$ awk 'NR>1{k=$2"-"$3; a[k]=a[k]" "$1} END{for (k in a) print k ":" a[k]}' file
apple-green: 567 742 893
banana-red: 173 896
avocado-black: 567 345
行将以in
运算符的随机顺序输出,列将按照它们在每个键值的输入中出现的顺序排列。如果你真的希望每个键的第一个字母大写为你问题中的预期输出:
$ awk 'NR>1{k=$2"-"$3; a[k]=a[k]" "$1} END{for (k in a) print toupper(substr(k,1,1)) substr(k,2) ":" a[k]}' file
Apple-green: 567 742 893
Banana-red: 173 896
Avocado-black: 567 345
如果您希望按照输入中的顺序输出行:
$ awk 'NR>1{k=$2"-"$3; a[k]=a[k]" "$1l; if (!seen[k]++) keys[++numKeys]=k} END{for (keyNr=1; keyNr<=numKeys; keyNr++) {k=keys[keyNr]; print toupper(substr(k,1,1)) substr(k,2) ":" a[k]} }' file
Banana-red: 173 896
Apple-green: 567 742 893
Avocado-black: 567 345