我有一个包含 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
最佳答案
$ 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
关于linux - 如何打印 column1 中的所有行以及其他列中的某些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42305456/