久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Vim去除重復(fù)行

 紫火神兵 2015-07-15

方法一:

先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}。
舉個最簡單的例子:awk '1' file和awk '{print $0}' file是一個道理,,都是從頭到尾依次打印文件的每一行,。

'!a[$0]++'
分成幾個部分簡單解釋下吧。
這個命令沒有{action}也就是說,只要pattern部分判斷值為真(非0)就打印該行,,否則就跳過不打印
,!在awk是取相反的意思,就是把對的變成錯的把真的變成假的,,放在這個命令中是神馬作用一會解釋,;
a[$0]這個非常好理解,建立數(shù)組a,,其變量是文本中的每一行,,awk里$1是第一列,$2是第二列,,以此類推$NF是最后一列,,而$0是代表所有列及分隔符,也就是一整行,,這樣如果pattern是真的那就打印一整行
++的意思是a數(shù)組取變量完畢后,,對該數(shù)組值+1
找個最簡單的文檔來解釋一下

cat file
xxx
yyy
xxx
zzz

這個文件有4行,其中第一,、三行是重復(fù)的,。套用這個命令處理流程如下:
獲取第一行a[xxx],因為這是第一行,,數(shù)組a里從沒見過xxx這個變量,,那么自然他的值就是假(0)也就是說a[xxx]=0,這個時候,!就有大作用了,,他把a[xxx]假(0)變成了a[xxx]為真(!0)這個時候原本不該打印的第一行就變成了應(yīng)該打印了,取邏輯反后對a[xxx]的值+1然后處理第二行
第二行a[yyy]這個情況跟剛才第一行的a[xxx]一樣,,也應(yīng)該打印他
到第三行的時候情況變了,,因為第一行已經(jīng)出現(xiàn)過a[xxx]并且已經(jīng)++過了,他的值已經(jīng)是非0而不是前兩行的0了,,本應(yīng)打印但這時候再由,!取邏輯反就不必打印了
第四行a[zzz]就又和第一、二兩行一樣了,。
所以執(zhí)行完就是這個結(jié)果
awk '!a[$0]++' file
xxx
yyy
zzz

再把file搞稍微復(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表示行號,。
那么現(xiàn)在來執(zhí)行下剛才講的試試看

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。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多