亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 刪除文本中的重復(fù)行的問題 [打印本頁]

作者: novemberrain    時(shí)間: 2008-06-17 10:09
標(biāo)題: 刪除文本中的重復(fù)行的問題
一個(gè)文本處理問題:
有如下文本

aaaa
bbbb
cccc
cccc
dddd
aaaa
bbbb
cccc

想去掉重復(fù)行,即:不管是相鄰的或不相鄰的重復(fù)行,均保留第一次出現(xiàn)的行,其后的重復(fù)行刪除,
變成如下結(jié)果:

aaaa
bbbb
cccc
dddd

實(shí)在是沒思路,各位達(dá)人幫幫忙!
作者: jinl    時(shí)間: 2008-06-17 10:13
awk '!a[$0]++' ufile
作者: 楓影誰用了    時(shí)間: 2008-06-17 10:13
sort后再uniq一下。

[huangzhibin@localhost ~]$ cat test |sort |uniq
aaaa
bbbb
cccc
dddd

[ 本帖最后由 楓影誰用了 于 2008-6-17 10:15 編輯 ]
作者: zhaopingzi    時(shí)間: 2008-06-17 10:20

  1. sort -u urfile
復(fù)制代碼

作者: Shell_HAT    時(shí)間: 2008-06-17 10:25
刪除重復(fù)行,并保持非重復(fù)行的原有順序。

  1. awk '!($0 in a){a[$0];print}' urfile
復(fù)制代碼

  1. sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' urfile
復(fù)制代碼

作者: luyi1983    時(shí)間: 2008-06-17 10:49
原帖由 jinl 于 2008-6-17 10:13 發(fā)表
awk '!a[$0]++' ufile


這個(gè)方法被評(píng)為最省資源的。
以前討論過。
作者: lemboyz    時(shí)間: 2008-06-17 11:00
原帖由 jinl 于 2008-6-17 10:13 發(fā)表
awk '!a[$0]++' ufile



高手能解釋一下嗎?謝謝。
作者: novemberrain    時(shí)間: 2008-06-17 11:12
謝謝各位!
還得好好學(xué)習(xí)一下!
忘了說,我想要的就是保持順序不變!
作者: cjaizss    時(shí)間: 2008-06-17 11:19

  1. awk 'f[$0]!=1{print;f[$0]=1}'
復(fù)制代碼

作者: ThomasLiu83    時(shí)間: 2008-06-17 12:39
原帖由 cjaizss 于 2008-6-17 11:19 發(fā)表

awk 'f[$0]!=1{print;f[$0]=1}'




awk '!a[$0]++' utfile

是幾乎一致的意思吧...?
作者: jinl    時(shí)間: 2008-06-17 13:53
原帖由 ThomasLiu83 于 2008-6-17 12:39 發(fā)表




awk '!a[$0]++' utfile

是幾乎一致的意思吧...?

條件判斷可以說基本一致,但是處理流程還是有差異的,cjaizss的腳本后續(xù)重復(fù)行不做任何處理,我這個(gè)腳本會(huì)對(duì)重復(fù)行一直計(jì)數(shù)
作者: r2007    時(shí)間: 2008-06-17 14:49
  1. awk '!($0 in a) {a[$0];print}' urfile
復(fù)制代碼

作者: wind521    時(shí)間: 2008-06-17 14:54
sort -u
作者: novemberrain    時(shí)間: 2008-06-17 15:00
大家的思路都很值得學(xué)習(xí),謝謝!

再增加點(diǎn)兒需求

待處理文本如下:
aaaa
bbbb

cccc
cccc

dddd
aaaa

bbbb
cccc
基本要求不變:去掉重復(fù)行,即:不管是相鄰的或不相鄰的重復(fù)行,均保留第一次出現(xiàn)的行,其后的重復(fù)行刪除, 同時(shí)保持順序不變
增加的要求:空行保持原樣,不進(jìn)行是否重復(fù)的處理

變成如下結(jié)果:
aaaa
bbbb

cccc

dddd

[ 本帖最后由 novemberrain 于 2008-6-17 15:03 編輯 ]
作者: ThomasLiu83    時(shí)間: 2008-06-17 15:23
原帖由 novemberrain 于 2008-6-17 15:00 發(fā)表
大家的思路都很值得學(xué)習(xí),謝謝!

再增加點(diǎn)兒需求

待處理文本如下:
aaaa
bbbb

cccc
cccc

dddd
aaaa

bbbb
cccc
基本要求不變:去掉重復(fù)行,即:不管是相鄰的或不相鄰的重復(fù)行,均保留第一次出 ...


awk '{if(!a[$0]){print $0;a[$0]=1;}else{printf("\n");}}' ufile
作者: novemberrain    時(shí)間: 2008-06-17 16:26
原帖由 ThomasLiu83 于 2008-6-17 15:23 發(fā)表


awk '{if(!a[$0]){print $0;a[$0]=1;}else{printf("\n");}}' ufile


目的達(dá)到了,但是直接把重復(fù)的行換成了空行
要求是保留空行,刪除其他的重復(fù)行,呵呵
作者: jinl    時(shí)間: 2008-06-17 16:29
awk '/^$/ && i {print $0;i++};!a[$0]++' file

[ 本帖最后由 jinl 于 2008-6-17 16:31 編輯 ]
作者: novemberrain    時(shí)間: 2008-06-17 16:30
原帖由 novemberrain 于 2008-6-17 16:26 發(fā)表


目的達(dá)到了,但是直接把重復(fù)的行換成了空行
要求是保留空行,刪除其他的重復(fù)行,呵呵


改成這樣就可以了
awk '{if(!a[$0]){print $0;a[$0]=1;}else{if($0~"^$") print $0;}}' ufile
作者: novemberrain    時(shí)間: 2008-06-17 16:35
原帖由 jinl 于 2008-6-17 16:29 發(fā)表
awk '/^$/ && i {print $0;i++};!a[$0]++' file


這個(gè)更強(qiáng),不過說實(shí)話一開始沒看懂,通過大家的例子明白了awk中的關(guān)聯(lián)數(shù)組,謝謝!
不過,還是沒看懂Shell_HAT 的

sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' urfile

繼續(xù)學(xué)習(xí)!
作者: woodie    時(shí)間: 2008-06-17 16:47
原帖由 novemberrain 于 2008-6-17 15:00 發(fā)表
大家的思路都很值得學(xué)習(xí),謝謝!

再增加點(diǎn)兒需求

待處理文本如下:
aaaa
bbbb

cccc
cccc

dddd
aaaa

bbbb
cccc
基本要求不變:去掉重復(fù)行,即:不管是相鄰的或不相鄰的重復(fù)行,均保留第一次出 ...

awk '!$0||!a[$0]++'

[ 本帖最后由 woodie 于 2008-6-17 18:48 編輯 ]




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2