Text-Processing
如何按列對腳本進行排序並刪除重複的腳本
我有一個將近 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
我嘗試了一些程式碼,但沒有得到想要的輸出。我怎樣才能做到這一點,我應該使用什麼?
您可以使用
sort
anduniq
刪除重複的行,然後使用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
列印第一列(我們將其用作數組鍵,我們將通過我們的名稱訪問它們*key
ifx
),接下來它們連接的第二列(可訪問array_name[key]
*)