- 论坛徽章:
- 16
|
回复 13# SlowLaris
不好意思,之前一直没仔细看这个问题,今天无意中翻起来,又认真思考了一下,写了下边的,但有点冗余,但比那个容易理解多了。思路完全一样。- awk 'NR==1{p1=$1;p2=$2;s=$1"\t"$2}NR>1{
- if($1==p1){
- if($2==p2+1){
- s=s"-"$2
- }else{
-
- s=s","$2}
-
- p1=$1;p2=$2
- }else {
- gsub(/-[^,]*-/,"-",s);print s;
-
- p1=$1;p2=$2;
- s=$1"\t"$2
- }
-
- }END{gsub(/-[^,]*-/,"-",s);
-
- print s}'
-
-
- 解释,读取第一行的时候,分别赋值p1,p2,和s
- 第二行,判断第一行是否相等,假如yes,那么判断
- 是否连续,是的话,-连接,否则,连接
- 那么第一行p1=4056,p=98,第二行,p1相等,p2不连续,7717 78,198
- 之后p1=4056;p2=198
-
- 此时第一列不等,那么p1,p2分别要赋新的值,然后把之前的格式化后打印(gsub)。此时必须要把s重新赋值,否则s还是之前的4056 78,198不变。
-
- 因为下一行打印上1或几行(合并之后),那么最后要有个end把最后一次的打印出来。
复制代码 |
|