簡體   English   中英

如何打印column1中的所有行以及其他列中的某些行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM