cht電腦資訊編輯器Vim
adm Find login register

刪除重複行

qtnez

joined: 2016-10-14
posted: 116
promoted: 1
bookmarked:
台灣‧屏東
1subject: 刪除重複行Promote 0 Bookmark 01 days agoquote  

這個問題,一般的處理方式(不在 Vim 中)是:

sort file | uniq > file.new

基本上就是先排序,然用 uniq 指令把重複的行去掉。在 Vim 中的話,可以使用:

:sort u

就可以了。現在問題來了,排序後,文件內容就變樣了。如何不排序的情況下刪除重複行呢?這在 Vim 中處理起來會複雜化,也不容易理解,有興趣的朋友可參考以下網頁的說明:

https://vim.fandom.com/wiki/Uniq_-_Removing_duplicate_lines

我個人是傾向用 awk 來處理,簡單明瞭,好理解(用陣列 array 的方式就不用排序了):

awk '!x[$0]++' some.file > new.file

其實在 Vim 裡頭也可以呼叫 awk 來處理:

:%!awk '\!x[$0]++'

這是我個人覺得最簡單,最有效率的處理方式。

-- 
Do not feed the troll, please.

edited: 3

cht電腦資訊編輯器Vim
adm Find login register
views:30