あなたのアプローチには2つの問題があるようです。
まず、データファイルの科学的記数法が問題を引き起こしています。ただし、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