2016-08-22 85 views
2

我有一個看起來像巴什 - 刪除重複維持秩序

1254543534523233434 
3453453454323233434 
2342342343223233535 
0909909092324243535 

有沒有在bash的方式/命令刪除上面的文件,基於特定字符串複製一個文件,而無需改變它們的順序輸出?

(含子 - > $ {行:11:8}

1254543534523233434 
2342342343223233535 
0909909092324243535 

我知道:

sort -u : sorts them numerically, then removes duplicates 
sort -kx,x -u : The same 
cat filein | uniq : requires them to be sorted already or it will not work 

餘米試圖找出是否有一個本地linux解決方案無需解析perl代碼就可以了。提前致謝。

+0

這不是一個確切的重複。它具有額外的限制,僅根據子字符串比較行,但打印完整行。 但是,[答案](http://stackoverflow.com/questions/1444406/how-can-i-delete-duplicate-lines-in-a-file-in-unix)應該很容易擴展到'awk' ![substr($ 0,11,8)] ++'file.txt'。 –

回答

3

你可以不使用awk需要排序:

awk '!uniq[substr($0, 12, 8)]++' file 

1254543534523233434 
2342342343223233535 
0909909092324243535 
  • 由於AWK指數從1開始,你需要使用substr($0, 12, 8),從而獲得所需8個字符的文本從第12位出發。
  • uniq是一個關聯數組,其子字符串使用substr函數進行檢索。
  • ++套陣列的值作爲1
+1

這工作完美,謝謝。 – onlyf