Text-Processing

如何按列對腳本進行排序並刪除重複的腳本

  • January 29, 2021

我有一個將近 2000 行的文件。文件格式是這樣的:

12 34
0 2
2 3
7 9
1 2
306 237
0 9
12 134
2 7
2 9
306 3
 

我正在嘗試編寫一個 bash 腳本來刪除重複的第一列並按第二列組織。我期望這個輸出:

0 2 9 
1 2
2 3 7 9
7 9 
12 34 134
306 237 3

我嘗試了一些程式碼,但沒有得到想要的輸出。我怎樣才能做到這一點,我應該使用什麼?

您可以使用sortanduniq刪除重複的行,然後使用awk由第一列值索引的數組,然後每第二列附加到數組的每個值,例如:

sort test.txt | uniq | awk '{if(col[$1])col[$1]=col[$1]" "$2; else col[$1]=$2;}; END{for (i in col) print i, col[i]}'

作為test.txt您的輸入文件。

請注意,在將新列添加到數組的正確值之前,您必須檢查數組是否為空,只需在值之間添加空格。

awk您一起可以:

awk '{ found[$1]= (found[$1]? found[$1] FS $2: $2); };
END  { for (x in found) print x, found[x]; }' infile

連接具有相同第一列的第二列並保存在我們命名的關聯數組中found,在END列印第一列(我們將其用作數組鍵,我們將通過我們的名稱訪問它們*keyif x),接下來它們連接的第二列(可訪問array_name[key]*)

引用自:https://unix.stackexchange.com/questions/631587