awk判断列数并处理
有一个文件,我判断其每行的列数,并做相应处理
NF=5 则打印$1";$2";"$3";;;;;;;;;;;"$9";;;;;;;;;;;"$15
NF=7 则打印$1";$2";"$3";"$4";;;;;;;;;"$9";"$10";;;;;;;;;"$15
NF=9 则打印$1";$2";"$3";"$4";"$5";;;;;;;"$9";"$10";"$11";;;;;;;"$15
NF=11 则打印$1";$2";"$3";"$4";"$5";"$6";;;;;"$9";"$10";"$11";"$12";;;;;"$15
NF=13 则打印$1";$2";"$3";"$4";"$5";"$6";"$7";;;"$9";"$10";"$11";"$12";"$13";;;"$15
NF=15 则打印$1";$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11";"$12";"$13";"$14";"$15
我自己编辑了一个,但是执行不成功,能否请各位帮忙看看?谢谢
nawk '{if(NF==5){print $1";$2";"$3";;;;;;;;;;;"$9";;;;;;;;;;;"$15};else if (NF==7) {print $1";$2";"$3";"$4";;;;;;;;;"$9";"$10";;;;;;;;;"$15};else if (NF==9) {print $1";$2";"$3";"$4";"$5";;;;;;;"$9";"$10";"$11";;;;;;;"$15};else if (NF==11) {print $1";$2";"$3";"$4";"$5";"$6";;;;;"$9";"$10";"$11";"$12";;;;;"$15};else if (NF==13) {print $1";$2";"$3";"$4";"$5";"$6";"$7";;;"$9";"$10";"$11";"$12";"$13";;;"$15};else {print $1";$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11";"$12";"$13";"$14";"$15;}END}' file
NF=5 则打印$1";$2";"$3";;;;;;;;;;;"$9";;;;;;;;;;;"$15
NF=7 则打印$1";$2";"$3";"$4";;;;;;;;;"$9";"$10";;;;;;;;;"$15
NF=9 则打印$1";$2";"$3";"$4";"$5";;;;;;;"$9";"$10";"$11";;;;;;;"$15
NF=11 则打印$1";$2";"$3";"$4";"$5";"$6";;;;;"$9";"$10";"$11";"$12";;;;;"$15
NF=13 则打印$1";$2";"$3";"$4";"$5";"$6";"$7";;;"$9";"$10";"$11";"$12";"$13";;;"$15
NF=15 则打印$1";$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11";"$12";"$13";"$14";"$15
我自己编辑了一个,但是执行不成功,能否请各位帮忙看看?谢谢
nawk '{if(NF==5){print $1";$2";"$3";;;;;;;;;;;"$9";;;;;;;;;;;"$15};else if (NF==7) {print $1";$2";"$3";"$4";;;;;;;;;"$9";"$10";;;;;;;;;"$15};else if (NF==9) {print $1";$2";"$3";"$4";"$5";;;;;;;"$9";"$10";"$11";;;;;;;"$15};else if (NF==11) {print $1";$2";"$3";"$4";"$5";"$6";;;;;"$9";"$10";"$11";"$12";;;;;"$15};else if (NF==13) {print $1";$2";"$3";"$4";"$5";"$6";"$7";;;"$9";"$10";"$11";"$12";"$13";;;"$15};else {print $1";$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11";"$12";"$13";"$14";"$15;}END}' file
作者: conall 发布时间: 2011-06-02
作者: xiaopan3322 发布时间: 2011-06-02
你想实现什么目的?把案例说出来,我觉得你的代码肯定冗繁了,肯定有改进的地方。
作者: zooyo 发布时间: 2011-06-02
nawk 'NF==5{print $1";$2";"$3";;;;;;;;;;;"$9";;;;;;;;;;;"$15}
NF==7{print $1";$2";"$3";"$4";;;;;;;;;"$9";"$10";;;;;;;;;"$15}
....
NF==15{print $1";$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11";"$12";"$13";"$14";"$15}' urfile
NF==7{print $1";$2";"$3";"$4";;;;;;;;;"$9";"$10";;;;;;;;;"$15}
....
NF==15{print $1";$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11";"$12";"$13";"$14";"$15}' urfile
作者: ywlscpl 发布时间: 2011-06-02
不好意思,字段太多了,我看花眼了——最后截取一个发现漏了一个"
对不起,我错了!!!!!
nawk 'NF==5{print $1";$2";"$3";;;;;;;;;;;"$9";;;;;;;;;;;"$15}
对不起,我错了!!!!!
nawk 'NF==5{print $1";$2";"$3";;;;;;;;;;;"$9";;;;;;;;;;;"$15}
作者: conall 发布时间: 2011-06-02
本帖最后由 jason680 于 2011-06-02 13:27 编辑
>>把案例说出来,我觉得你的代码肯定冗繁了,肯定有改进的地方。
授之与渔
设好OFS=";"
NF=5 则打印$1";$2";"$3";;;;;;;;;;;"$9";;;;;;;;;;;"$15
for(n=4;n<=8;n++){$n=";"}for(n=10;n<=14;n++){$n=";"}
NF=7 则打印$1";$2";"$3";"$4";;;;;;;;;"$9";"$10";;;;;;;;;"$15
for(n=5;n<=8;n++){$n=";"}for(n=11;n<=14;n++){$n=";"}
NF=9 则打印$1";$2";"$3";"$4";"$5";;;;;;;"$9";"$10";"$11";;;;;;;"$15
for(n=6;n<=8;n++){$n=";"}for(n=12;n<=14;n++){$n=";"}
NF=11 则打印$1";$2";"$3";"$4";"$5";"$6";;;;;"$9";"$10";"$11";"$12";;;; ;"$15
for(n=7;n<=8;n++){$n=";"}for(n=13;n<=14;n++){$n=";"}
NF=13 则打印$1";$2";"$3";"$4";"$5";"$6";"$7";;;"$9";"$10";"$11";"$12";" $13";;;"$15
for(n=8;n<=8;n++){$n=";"}for(n=14;n<=14;n++){$n=";"}
NF=15 则打印$1";$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11";"$12" ;"$13";"$14";"$15
最后都可以直接print $0
======================
再简化
NF= 5, 7, 9, 11, 13
for(n=4+(NF-5)/2;n<=8;n++){$n=";"} for(n=10+(NF-5)/2;n<=14;n++) {$n=";"}
======================
不知可否再简化为
for(n=4+(NF-5)/2;n<=8;n++){$n=";";${n+6}=";"}
这个应可以
for(n=4+(NF-5)/2;n<=8;n++){$n=";";m=n+6;$m=";"}
QUOTE:
你想实现什么目的?把案例说出来,我觉得你的代码肯定冗繁了,肯定有改进的地方。
zooyo 发表于 2011-06-02 11:33
zooyo 发表于 2011-06-02 11:33
>>把案例说出来,我觉得你的代码肯定冗繁了,肯定有改进的地方。
授之与渔
设好OFS=";"
NF=5 则打印$1";$2";"$3";;;;;;;;;;;"$9";;;;;;;;;;;"$15
for(n=4;n<=8;n++){$n=";"}for(n=10;n<=14;n++){$n=";"}
NF=7 则打印$1";$2";"$3";"$4";;;;;;;;;"$9";"$10";;;;;;;;;"$15
for(n=5;n<=8;n++){$n=";"}for(n=11;n<=14;n++){$n=";"}
NF=9 则打印$1";$2";"$3";"$4";"$5";;;;;;;"$9";"$10";"$11";;;;;;;"$15
for(n=6;n<=8;n++){$n=";"}for(n=12;n<=14;n++){$n=";"}
NF=11 则打印$1";$2";"$3";"$4";"$5";"$6";;;;;"$9";"$10";"$11";"$12";;;; ;"$15
for(n=7;n<=8;n++){$n=";"}for(n=13;n<=14;n++){$n=";"}
NF=13 则打印$1";$2";"$3";"$4";"$5";"$6";"$7";;;"$9";"$10";"$11";"$12";" $13";;;"$15
for(n=8;n<=8;n++){$n=";"}for(n=14;n<=14;n++){$n=";"}
NF=15 则打印$1";$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11";"$12" ;"$13";"$14";"$15
最后都可以直接print $0
======================
再简化
NF= 5, 7, 9, 11, 13
for(n=4+(NF-5)/2;n<=8;n++){$n=";"} for(n=10+(NF-5)/2;n<=14;n++) {$n=";"}
======================
不知可否再简化为
for(n=4+(NF-5)/2;n<=8;n++){$n=";";${n+6}=";"}
这个应可以
for(n=4+(NF-5)/2;n<=8;n++){$n=";";m=n+6;$m=";"}
作者: jason680 发布时间: 2011-06-02
看的眼都花了
作者: zhaoke0128 发布时间: 2011-06-02