- 论坛徽章:
- 1
|
本帖最后由 ace_fei 于 2014-02-12 11:38 编辑
原始文本
3076931 3076733 AA
3076738 3076739 BB
3076130 3076131 CC
3071127 3071127 CC
需要得到文本
3076931 3076731 AA
3076732 3076732 AA
3076933 3076733 AA
3076738 3076738 BB
3076739 3076739 BB
3076130 3076130 CC
3076131 3076131 CC
3071127 3071127 CC
我现在用awk来处理,可以得到结果。
$awk '{a=substr($1,7,1);b=substr($2,7,1);for(c=a;c-b<=0;c++){x=substr($1,1,6)c;y=substr($2,1,6)c;print x,y,$3}}' 1.txt
3076931 3076731 AA
3076932 3076732 AA
3076933 3076733 AA
3076738 3076738 BB
3076739 3076739 BB
3076130 3076130 CC
3076131 3076131 CC
3071127 3071127 CC
但是我发现我要是把for循环中的 c-b<=0,改为c<=b,结果就不同了,请问大家知道是什么原因吗?
$awk '{a=substr($1,7,1);b=substr($2,7,1);for(c=a;c<=b;c++){x=substr($1,1,6)c;y=substr($2,1,6)c;print x,y,$3}}' 1.txt
3076931 3076731 AA
3076932 3076732 AA
3076933 3076733 AA
3076738 3076738 BB
3076739 3076739 BB
30767310 30767310 BB
30767311 30767311 BB
... ...
30767389 30767389 BB
3076130 3076130 CC
3076131 3076131 CC
3071127 3071127 CC
如果是比较ascii码,为什么就BB那行数据有异常,是'8'跟'9'对应的ascii码做比较吗?
进展:
我修改了一下原始文本BB那列的数据,发现只有当末位数是9的时候(即b=9),才会出异常,判断c<=b时,会自动变成c<=90。 |
|