Shell-shell根据指定值处理连续的整数

Shell-shell根据指定值处理连续的整数

想挽留 发布于 2017-08-01 字数 423 浏览 1250 回复 1

有文件数据如下
A 155
A 15
A 17
A 18
A 19
A 20
A 100
A 100
A 101
A 102
B 1
B 4
B 6
B 7
B 8
C 55
C 56
C 70
C 71
C 72
根据第一列相同的值,将数据合并在一起,第二列的数据如果是连续的则使用“-”连接,得到如下结果:
A: 155 15 17-20 100-102
B: 1 4 6-8
C: 55-56 70-72
请教使用shell如何实现。

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

想挽留 2017-08-21 1 楼

awk -F" " '{
a[$1]=a[$1]" "$2
}
END{
for (i in a)
{
res=""
len=split(a[i],tmp," ")
for( j=1;j<=len;j++){
if(j==1)
result=tmp[j]
else
{
if(tmp[j-1]==tmp[j])continue
if(tmp[j-1]+1==tmp[j]){
result=result"-"tmp[j]
}
else{
result=result" "tmp[j]
}
}
}
len2=split(result,tmp2," ")
for(n=1;n<=len2;n++){
len3=split(tmp2[n],d,"-")
if(len3>1){
res=res" "d[1]"-"d[len3]
}else
res=res" "tmp2[n]
}
print i,res
}
}' file

比较笨的办法