方法一: 先sort排序,再去重 :sort //直接排序 :g/^\(.*\)$\n\1$/d //去除重復(fù)行 :g/\%(^\1$\n\)\@<=\(.*\)$/d //功能同上,,也是去除重復(fù)行 :g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d //功能同上,,也是去除重復(fù)行 方法二:使用awk awk ‘!a[$0]++’ file 解析: 借用http://bbs.51cto.com/thread-964013-1.html awk流程是逐行處理的,默認從文件的第一行一直處理到文件最后一行,,還要知道awk的基本命令格式是'pattern{action}'先匹配各種各樣的樣式,,然后大括號里處理如何打印輸出,默認的只要匹配了pattern就{print $0},,如果pattern未命中其判斷值為假(0)那么就不會再去處理{action}了,;pattern命中則為判斷值為真(非0)就去處理{action}。 '!a[$0]++' cat file 這個文件有4行,其中第一,、三行是重復(fù)的,。套用這個命令處理流程如下: awk '{print NR,$0}' file 1 xxx 2 yyy 3 zzz 4 xxx 5 yyy 6 zzz 7 xxx 8 yyy 9 zzz 一共9行文本,,3行一次重復(fù)。為了看得更清楚,,本來默認的{print $0}稍微改下,,變成{print NR,$0}。 NR表示行號,。 awk '!a[$0]++{print NR,$0}' file 1 xxx 2 yyy 3 zzz awk 'a[$0]++{print NR,$0}' file 4 xxx 5 yyy 6 zzz 7 xxx 8 yyy 9 zzz 很明顯了吧,,有,!的命令是只打印第一次出現(xiàn)的$0也就是去除重復(fù)咯,而沒有,!的命令正好跟他相反,,就是僅僅去除第一次出現(xiàn)的$0。 |
|
來自: 紫火神兵 > 《Linux系統(tǒng)》