2011年1月5日 星期三

[Unix] 以 line 為單位,去除重複的資料

有一堆 GPS 資料想要使用,但在紀錄資料時,有可能某處停留較久,因此會有重複資料的問題。解決方式可以寫簡單的程式,但我一直想不出有哪個洽當的 Unix 指令可以用,就先挑 awk 來使用。


資料格式:


25.064903,121.526657,
25.064903,121.526657,
25.064903,121.526657,
25.064898,121.526573,
25.064898,121.526573,
25.064898,121.526573,
25.064890,121.526489,
25.064890,121.526489,
25.064886,121.526436,
25.064886,121.526436,


輸出目標:


25.064903,121.526657,
25.064898,121.526573,
25.064890,121.526489,
25.064886,121.526436,


指令:


$ awk '{ if( !a[$0] ){ print $0 ; a[$0] = 1; } }' in.txt


使用簡單的 hash 概念。但比較重要的是指令少用,紀錄一下,以節省以後的時間花費。


感謝許青蛙補充!若不在意順序還可以用 sort -u 就好


感謝 fin 補充,對於連續的資料可以採用 uniq 來處理就行啦,所以在這個情境下就是連續性的刪除,可以用:


$ cat in.txt | uniq


沒有留言:

張貼留言