日期:2014-05-16  浏览次数:20649 次

awk处理文本的问题,急。。。
本帖最后由 JJ123ll123 于 2014-02-12 09:35:02 编辑
原始文本
3076931 3076733 AA
3076738 3076739 BB
3076130 3076131 CC
3071127 3071127 CC
需要得到文本
3076931 3076731 AA
3076932 3076732 AA
3076933 3076733 AA
3076738 3076738 BB
3076739 3076739 BB
3076130 3076130 CC
3076131 3076131 CC
3071127 3071127 CC
我写了一个脚本但是有问题
cat 1.txt  | awk '{a=substr($1,7,1);b=substr($2,7,1)};{if(a<b){for (c=a;c<=b;c++){i=substr($1,1,6)c; print i" "i" "$3}}else {print $0}}'
请教各位大侠了。
------解决方案--------------------
脚本好像没什么问题,测试了一下,当b的值大于8的时候都会有问题。
------解决方案--------------------
a=int(substr($1,7,1));b=int(substr($2,7,1))
------解决方案--------------------
awk '{a=substr($1,7,1);b=substr($2,7,1)};{if(a<b){for (c=a;c-b<=0;c++){i=substr($1,1,6)c; print i" "i" "$3}}else {print $0}}' 1.txt

------解决方案--------------------
cat tmp  
------解决方案--------------------
 awk '{a=substr($1,6,2);b=substr($2,6,2)};{if(a<b){for (c=a;c<=b;c++){i=substr($1,1,5)c; print i" "i" "$3}}else {print $0}}'
------解决方案--------------------
$ awk '{parta=gensub("^(.*)(..)$", "\\1", "G", $1);partb=gensub("^(.*)(..)$", "\\1", "G", $2);begin=gensub("^(.*)(..)$", "\\2", "G", $1);end=gensub("^(.*)(..)$", "\\2", "G", $2);for(i=begin;i<=end;i++)print parta""i,partb""i,$3}' file
3076931 3076731 AA
3076932 3076732 AA
3076933 3076733 AA
3076738 3076738 BB
3076739 3076739 BB
3076130 3076130 CC
3076131 3076131 CC
3071127 3071127 CC