LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 808|回复: 9

域中比较大小

[复制链接]
发表于 2007-9-16 21:51:14 | 显示全部楼层 |阅读模式
$2         $3         $4
250        100        175
155        470        201
25        95        190
比如这样的域,用awk求出其中最大的赋值给large,最小的赋值给small。怎么搞?
另外在BEGIN{}中初始化无效呢?
发表于 2007-9-16 22:11:21 | 显示全部楼层
写一个精通的for就可以实现,不过,用awk没有试过!
回复 支持 反对

使用道具 举报

发表于 2007-9-17 16:44:56 | 显示全部楼层
awk  '{ for (i=2;i<4;i++) {
                j=i+1
                if($j<$i) {t=$i;$i=$j;$j=t}
          }
printf("small=%d,large=%d\n",$2,$4)
} ' filename
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-18 10:07:00 | 显示全部楼层
Post by easydf
awk  '{ for (i=2;i<4;i++) {
                j=i+1
                if($j<$i) {t=$i;$i=$j;$j=t}
          }
printf("small=%d,large=%d\n",$2,$4)
} ' filename



不能用for,if条件语句,数组等,可用的 (?:) while 和BEGIN END,管道、重定向,找出其中最大的,我懂你的意思,让他们先排序,然后输出大小,但你的处理也有问题,你只能保证每行的最大最小,不能保证所有域中找出最大最小
回复 支持 反对

使用道具 举报

发表于 2007-9-18 13:05:59 | 显示全部楼层
定义两个变量就行了呗。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-18 14:53:17 | 显示全部楼层
Post by gamedragon
定义两个变量就行了呗。

劳驾,写个代码呢?
回复 支持 反对

使用道具 举报

发表于 2007-9-18 21:08:50 | 显示全部楼层
不明白为什么不让用if,for
BEGIN{large=0;small=1000}
$2>large{large=$2}
$3>large{large=$3}
$4>large{large=$4}
$2<small{small=$2}
$3<small{small=$3}
$4<small{small=$4}
END{print "large":large "small":small}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-19 00:21:05 | 显示全部楼层
Post by lastart
不明白为什么不让用if,for
BEGIN{large=0;small=1000}
$2>large{large=$2}
$3>large{large=$3}
$4>large{large=$4}
$2<small{small=$2}
$3<small{small=$3}
$4<small{small=$4}
END{print "large":large "small":small}

这个不好,如果都大于1000的话是不是要改10000?
这个问题出现在if for 之前,就算没有学过if for。
回复 支持 反对

使用道具 举报

发表于 2007-9-19 12:54:27 | 显示全部楼层
这有什么不好的.
你就是写成1e10都没问题.
回复 支持 反对

使用道具 举报

发表于 2007-9-19 20:41:46 | 显示全部楼层
如果没有负数,可以考虑初始化为负数,或是其他不再计算阈内的“非法”任一值
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表