shell 刪除文字中的重複行

2022-07-15 12:30:17 字數 844 閱讀 9972

三種常見方法:

第一,用sort+uniq,注意,單純uniq是不行的。

shell> sort -k2n file | uniq > a.out

這裡我做了個簡單的測試,當file中的重複行不再一起的時候,uniq將服務刪除所有的重複行。經過排序後,所有相同的行都在相鄰,因此unqi可以正常刪除重複行。

第二,用sort+awk命令,注意,單純awk同樣不行,原因同上。

shell> sort -k2n file | awk 『』

當然,自己把管道後面的**重新設計一下,可能不需要sort命令先排序拉。

第三,用sort+sed命令,同樣需要sort命令先排序。

shell> sort -k2n file | sed 『$!n; /^\(.*\)\n\1$/!p; d』

最後附乙個必須先用sort排序的文字的例子,當然,這個需要用sort排序的原因是很簡單,就是後面演算法設計的時候的「區域性性」,相同的行可能分散出現在不同的區域,一旦有新的相同行出現,那麼前面的已經出現的記錄就被覆蓋了,看了這個例子就好理解拉。

ffffffffffffffffff 

ffffffffffffffffff

eeeeeeeeeeeeeeeeeeee

fffffffffffffffffff 

eeeeeeeeeeeeeeeeeeee

eeeeeeeeeeeeeeeeeeee 

gggggggggggggggggggg

其實,這是我隨便打進去的幾行字,沒想到就是必須用sort的很好例子,大家可以自己試試看。

參考資料:

[1] sed單行指令碼快速參考 

[2] 如何刪除重複的行(sed或awk)

shell中如何刪除文字比較長的行

有的時候需要對檔案執行刪除刪除操作,這個時候比較常用的會使用vi命令中的dd命令,比如先執行10g 跳轉到第10行 然後再執行20dd 刪除20行 但實際情況未必是這麼常規,比如說,要刪除檔案中,某行長度超過200個字元的行,如果文字比較小,還好,如果是幾萬行,幾十萬行的呢?這個想用vi就不現實了。...

檢查文字中的重複行

有時候我們需要去檢查文字中是否有重複的行。對於行數較少的檔案我們當然可以人工去檢查,但是如果行數比較多的話,比如成千上萬的大文字,再用人工去檢查就太不實際了。其實我們可以用乙個批處理檔案來幫我們完成這個工作。如下 echo off for f delims i in 1.txt do if defi...

awk中刪除重複行

在awk中,可以用!a 0 做為條件,對重複出現的行進行處理。bash 3.2 cat 2 abcabc ef123 dgag 123 bash 3.2 awk a 0 2 abcef 123dgag 對於awk a 3 需要了解3個知識點 1 awk陣列知識,不說了 2 awk的基本命令格式 aw...