号段展开格式规范

973阅读 0评论2010-11-10 expert1
分类:

省份    城市    区号    1350    1351      1352       1353    1354    1355    1356    1357    1358    1359
上海    上海    21      160-199 210-219 400-499                         400-499         550-599
天津    天津    883                   "960-962,998"                                        "830-833,842-844"
要求结果如下(举例而已,不是实际数据):
 
1350200                天津
1350201                天津
1350202                天津
1350203                天津
1350204                天津
1350205                天津
实际上是个体力活,比较麻烦不难。这是黑哥给的答案,大量的sub,gsub来规范格式:
BEGIN {
    FS = "\"?[ ]\"?";
}
NR == 1 {
    for(i = 4;i <= NF;i++) h[i] = $i;
    next;
}
{
    for(i = 4;i <= NF;i++)
        if ( $i ) {
            n = split($i,r,",");
            for ( j = 1;j <= n;j++)
                if (r[j]~/-/) {
                    s = r[j];
                    sub(/-.*/,"",s);
                    e = r[j];
                    sub(/.*-/,"",e);
                    for(k = s;k <= e;k++)
                        printf("%s%03d\t%s\n", h[i],k,$2);
                }
                else
                    printf("%s%03d\t%s\n", h[i],r[j],$2);
        }
}
上一篇:sed违反常规思路
下一篇:找出2个文件公有部分以及标签