Chinaunix
标题:
大神们帮我分析下:(awk)
[打印本页]
作者:
tank064
时间:
2012-11-02 11:32
标题:
大神们帮我分析下:(awk)
[benny@qycn ~]$ cat a
bc 1
abc 2
abc 3
cde 1
cde 2
fff 1
fff 2
fff 3
fff 5
fff 7
fff 9
fff 10
fff 11
fff 12
fff 13
[benny@qycn ~]$ awk '{a[$1]=a[$1]" "$2}END{for(i in a){printf i":";c=split(a[i],b);for(i=2;i<=c;i++){if(b[i]==(b[i-1]+1)){if(i==c){printf d"-"b[i]}else{if(!d)d=b[i-1]}}else{if(d){printf d"-"b[i-1]",";d=""}else{printf b[i-1]","}}};printf "\n"}}' a
cde:-2
bc:
fff:1-3,5,7,9-13
abc:9-3
复制代码
看了半天没懂。。
作者:
waker
时间:
2012-11-02 12:11
那就再看半天试试呗
作者:
zooyo
时间:
2012-11-02 12:52
提示:
作者被禁止或删除 内容自动屏蔽
作者:
jason680
时间:
2012-11-02 13:36
本帖最后由 jason680 于 2012-11-02 13:39 编辑
回复
1#
tank064
n for number
p for next time output
id for remember last $1
$ echo 'bc 1
abc 2
abc 3
cde 1
cde 2
fff 1
fff 2
fff 3
fff 5
fff 7
fff 9
fff 10
fff 11
fff 12
fff 13' | awk '{if($1!=id){if(id!=""){print p};printf $1":"$2;p="";n=$2}else{if(n+1==$2)p="-"$2;else{printf p","$2;p=""}n=$2}id=$1}END{print p}'
bc:1
abc:2-3
cde:1-2
fff:1-3,5,7,9-13
作者:
yestreenstars
时间:
2012-11-02 14:42
awk '{if(a[$1]){if(gensub(/.*[-,]([0-9]+)$/,"\\1",1,a[$1])+1==$2)a[$1]=a[$1]"-"$2;else a[$1]=a[$1]","$2}else a[$1]=$2}END{for(i in a){gsub(/-[^,]*-/,"-",a[i]);print i":"a[i]}}' urfile
复制代码
bc:1
abc:2-3
cde:1-2
fff:1-3,5,7,9-13
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2