Chinaunix

标题: 多判断条件awk编写请教 [打印本页]

作者: kevinwell    时间: 2009-03-15 12:12
标题: 多判断条件awk编写请教
白硎 2004  801  2000           2100          1.1
白硎 2004  802  1700           1800          .9
我需要把以上数据做筛选,请教一下怎么写好:
1、判断第二栏位是否大于1980,如果小于退出,大于继续。
2、如果大于1980,那么对第三栏位进行判断,如果大于三个字符,那么把前两个字符和后两个字符分别提出,如果是三个字符把第一个字符和后两个字符分别提出,比如,801运行完之后输出两列:8和01,如果是1814,输出结果是18和14。
3、同第三栏位相同,第四和第五也需要判断是三个字符还是四个字符,如果是三个,如果是三个字符把第一个字符和后两个字符分别提出,如果是四个,那么把前两个字符和后两个字符分别提出。
新手,希望大侠指教

[ 本帖最后由 kevinwell 于 2009-3-15 12:20 编辑 ]
作者: 皇家救星    时间: 2009-03-15 13:06
判断 if
退出 next;
长度 length
截取 substr
作者: sunbw001    时间: 2009-03-15 13:43
awk -F"[ \t]+" '{if(length($2)==3){exit};if(length($2)>3){if(length($3)==3){$3=substr($3,1,1)" "substr($3,2)}else{$3=substr($3,1,2)" "substr($3,3)};if(length($4)==3){$4=substr($4,1,1)" "substr($4,2)}else{$4=substr($4,1,2)" "substr($4,3)}};print $0}' data

这样吗?

[ 本帖最后由 sunbw001 于 2009-3-15 13:45 编辑 ]
作者: sunbw001    时间: 2009-03-15 13:56
awk -F"[ \t]+" '{if(length($2)==3){exit};if(length($2)>3){for(it=3;it<=5;it++){if(length($it)==3){$it=substr($it,1,1)" "substr($it,2)}else{$it=substr($it,1,2)" "substr($it,3)}}};print $0}' data

简单点
作者: welcome008    时间: 2009-03-15 23:48
if(...)
statements
elseif(...)
statements
elseif()
...
else



C里咋用,这里就咋用吧
作者: 飞鸿无痕    时间: 2009-03-16 08:46
楼上说得对!!
作者: 我是一隻羊    时间: 2015-03-12 23:39
本帖最后由 我是一隻羊 于 2015-03-12 23:39 编辑

回错地方了,抱歉.
作者: zsszss0000    时间: 2015-03-13 09:14
  1. awk '{if($2<1980)next;for(i=3;i<NF;i++){len=length($i);printf substr($i,1,len-2)"\t"substr($i,len-2,2)"\t"}printf "\n"}' file
复制代码
  1. 8       80      20      00      21      10
  2. 8       80      17      70      18      80
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2