![](/img/trans.png)
[英]how can i get certain columns and certain rows from file with egrep and awk
[英]How to print all rows from column1 and only certain rows from other columns
我有一個包含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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.