亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
關(guān)于文本內(nèi)容合并
[打印本頁]
作者:
dahaoshanhe
時(shí)間:
2016-05-08 19:39
標(biāo)題:
關(guān)于文本內(nèi)容合并
按照第二列范圍壓縮顯示
cat file:
111 1
111 2
333 7
222 6
222 9
111 3
222 10
333 3
333 4
333 5
333 6
result:
111 1-3
222 6-6
222 9-10
333 3-7
作者:
haooooaaa
時(shí)間:
2016-05-08 21:21
本帖最后由 haooooaaa 于 2016-05-09 21:52 編輯
已更改, 需要 awk 4.0
awk '{a[$1][$2]=$2}END{for(i in a){s=asort(a[i],b);f=e=b[1];for(j=2;j<=s;j++){if(b[j]-1==e)e=b[j];else{print i,f"-"e;f =e=b[j]}}print i,f"-"e}}'
復(fù)制代碼
作者:
sunzhiguolu
時(shí)間:
2016-05-08 22:57
回復(fù)
1#
dahaoshanhe
你試下,
#!/usr/bin/perl
use strict;
use warnings;
sub Join{
my $sID = shift;
if (@_ > 1){
printf ("%s %s\n",$sID,join ("-", @_[0, -1]));
}else{
printf ("%s %s\n",$sID, join ("-", $_[0], $_[0]));
}
}
my @aData;
foreach (`sort -t" " -k1,1n -k2,2n f`){
my @aList = split;
if (!@aData){
@aData = @aList;
next;
}
if ($aData[0] == $aList[0]){
if ($aData[-1] + 1 == $aList[-1]){
push (@aData, $aList[-1]);
}else{
Join (@aData);
$#aData = 0;
push (@aData, $aList[-1]);
}
next;
}
Join (@aData);
@aData = @aList;
}
Join (@aData);
復(fù)制代碼
111 1-3
222 6-6
222 9-10
333 3-7
作者:
sunzhiguolu
時(shí)間:
2016-05-09 00:08
把 Join 函數(shù)精簡(jiǎn)了下:
sub Join{
printf ("%s %s\n",$_[0], join ("-", @_[1, -1]));
}
復(fù)制代碼
作者:
dahaoshanhe
時(shí)間:
2016-05-09 06:56
回復(fù)
2#
haooooaaa
你這是在哪個(gè)版本的AWK上運(yùn)行的,我的版本不識(shí)別這樣的寫法
作者:
elu_ligao
時(shí)間:
2016-05-09 09:16
awk '{a[$1]=a[$1] $2 FS}END{for(i in a){l=split(a[i],b);asort(b);printf i FS b[1]"-";for(k=2;k<=l;++k){if(b[k]!=b[k-1]+1)printf b[k-1]"\n"i FS b[k]"-"};printf b[k-1]"\n"}}'
復(fù)制代碼
作者:
jcdiy0601
時(shí)間:
2016-05-09 09:39
sort -n -k2,2 file|awk '{a[$1]=a[$1]" "$2}END{for(i in a)print i,a[i]}'|awk '{print $1,$2"-"$NF}'
111 1-3
222 6-10
333 3-7
作者:
dahaoshanhe
時(shí)間:
2016-05-09 10:02
回復(fù)
7#
jcdiy0601
我和你的思路一樣,只是SORT傷不起啊,有2億多行記錄,效率不高。
作者:
99超人
時(shí)間:
2016-05-09 10:04
提示:
作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者:
jason680
時(shí)間:
2016-05-09 10:36
回復(fù)
5#
dahaoshanhe
$ awk 'function xsort(v,s ,t,n,e){split(s,c," ");t=asort(c);e=c[1];printf ("%s %d-",v,e);for(n=2;n<=t;++n){if(c[n]-e-1)printf("%d\n%s %d-",e,v,c[n]);e=c[n]}print e}{a[$1]=a[$1]$2" "}END{t=asorti(a,b);for(n=1;n<=t;++n){xsort(b[n],a[b[n]])}}' file
111 1-3
222 6-6
222 9-10
333 3-7
作者:
haooooaaa
時(shí)間:
2016-05-09 11:29
本帖最后由 haooooaaa 于 2016-05-09 17:39 編輯
回復(fù)
5#
dahaoshanhe
前面那個(gè)是錯(cuò)的, 用的awk 4.0
下面這個(gè)python 測(cè)試可以,
result = {}
with open("file") as f:
for i in f:
try: result.setdefault(i.split()[0],[]).append(int(i.split()[-1]))
except: pass
for i in result:
li = sorted(result[i])
start = end = li[0]
for j in li[1:]:
if j - 1 == end:
end = j
else:
print "%s %s-%s" % (i,start,end)
start = end = j
print "%s %s-%s" % (i,start,end)
復(fù)制代碼
這樣更好一點(diǎn)。
作者:
sunzhiguolu
時(shí)間:
2016-05-09 16:33
都是傳說中的戰(zhàn)斗機(jī)啊, 向各位大神致敬!
作者:
sunzhiguolu
時(shí)間:
2016-05-09 16:59
回復(fù)
6#
elu_ligao
大神能問下, 您這個(gè) ID 咋是紅的,
作者:
elu_ligao
時(shí)間:
2016-05-09 17:12
回復(fù)
13#
sunzhiguolu
我也不清楚呀, 就是上次認(rèn)證過后就紅了, 我看到有些是紅的, 有些是藍(lán)的, 不知道有什么特殊含義
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2