你的方法似乎有两个问题。
首先,数据文件中的科学记数法造成了一些困难。但是,我们可以使用该printf
命令进行更正。如果将值的初始分配修改为以下
set var1 = `cat file1 | xargs printf "%f"`
set var2 = `cat file2 | xargs printf "%f"`
set var3 = `cat file3 | xargs printf "%f"`
(或者,
set var1 = `cat file` ; set var1 = `printf "%f' $var1`
如果您想避免使用该xargs
命令)
这会将您的科学记数法数字(例如,-3.675000e+05)转换为一个简单的浮点值(例如,您的第一个示例中的 -36750.0000)。Csh 不在数字中的“e+”下,因此感到困惑。
但是,我们还没有完全走出困境。Csh 也不理解负值,所以我们需要另一个命令来整理它们;bc
根据需要评估布尔查询。
foreach
如下重写循环将正确评估比较
foreach kmax ( $var1 $var2 $var3 )
if ( `echo "$kmax > $maxtmp" | bc` ) then
set maxtmp = $kmax
endif
end
综上所述,您的脚本的以下版本似乎可以工作:
#! /bin/csh
set var1 = `cat file1 | xargs printf "%f"`
set var2 = `cat file2 | xargs printf "%f"`
set var3 = `cat file3 | xargs printf "%f"`
set maxtmp = 0
foreach kmax ($var1 $var2 $var3)
if (`echo "$kmax > $maxtmp" | bc`) then
set maxtmp = $kmax
endif
end
echo $maxtmp