不排序去除文件中的重複行 轉

awk ' !x[$0]++' file3

簡要解釋一下,awk 的基本執行流程是,對文件的每一行,做一個指定的邏輯判斷,如果邏輯判斷成立,則執行指定的命令;如果邏輯判斷不成立,則直接跳過這一行。

我們這裏寫的 awk 命令是 !x[$0]++,意思是,首先創建一個 map 叫 x,然後用當前行的全文 $0 作爲 map 的 key,到 map 中查找相應的 value,如果沒找到,則整個表達式的值爲真,可以執行之後的語句;如果找到了,則表達式的值爲假,跳過這一行。由於表達式之後有 ++,因此如果某個 key 找不到對應的 value,該 ++ 操作會先把對應的 value 設成 0,然後再自增成 1,這樣下次再遇到重複的行的時候,對應的 key 就能找到一個非 0 的 value 了。

我們前面說過,awk 的流程是先判斷表達式,表達式爲真的時候就執行語句,可是我們前面寫的這個 awk 命令裏只有表達式,沒有語句,那我們執行什麼呢?原來,當語句被省略的時候,awk 就執行默認的語句,即打印整個完整的當前行。就這樣,我們通過這個非常簡短的 awk 命令實現了去除重複行並保留原有文件順序的功能。

 

 

寫入其他文件

awk ' !x[$0]++' file3 > file4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章