1. 程式人生 > >【shell】awk按域去除重複行

【shell】awk按域去除重複行

首先解釋一下什麼叫“按域去除重複行”:

有的時候我們需要去除的重複行並不是整行都重複,兩行的其中一列的元素相同我們有的時候就需要認定這兩行重複,因此有了今天的內容。

去除重複行shell有一個原生命令但是不太好使應為這個命令找的重複行是上下文的重複行,也就是說需要提前排序,這樣就增加了不必要的麻煩,我們在這裡選擇使用awk工具進行重複行的去除。

命令如下:

awk '!array[$0]++' Filename

解釋一下這行程式碼,由於awk工作方式的特殊性,也就是按行讀入按行輸出,中間引號內的語句就是以[$0]為元素去map剩下的行,$0代表整行,把0換成數字就是行的index,!表示如果存在相同行就跳過,沒有相同行才要輸出,++是迭代過程。

另外,如果要將結果重定向到檔案中,需要使用shell的檔案O/I符號">"進行操作。

擴充套件:如果我們要找兩個或者多個列相同的行怎麼辦?

在定義[]的時候我們可以如下寫法:

awk '!array[$1,$2]++' Filename

這樣就可以鑑別兩列相同的行,多列亦如此。