awk判断列数并处理
时间:2011-06-02
来源:互联网
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
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}
作者: conall 发布时间: 2011-06-02
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
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28