web-dev-qa-db-ja.com

CSHの浮動小数点?

私はこのスクリプトを実行しようとしましたが、10進数の0.2224のために「badlyformed number」というエラーが表示されます。整数に置き換えれば、スクリプトは正常に機能します。

#!/bin/csh -f

set shift="-1 2  "

foreach d ($shift)
@ z = $d * "0.2224"

 awk -v k=$d 'FNR==3{$1+=4*k;}1' Lat | cat >>head
 awk -v k=$d '{$2+=k;}1' f1 | cat >>g1
 awk -v k=$d '{$2+=3*k;}1' f2 | cat >>g2
cat head g1 g2 > POSCAR-$z
rm head
rm g1
rm g2
1
Vishal Gupta

シェル変数は数字ではなく文字列です。 2または"0.2224"と入力すると、文字列として表示されます。シェルはいくつかの単純なデータ変換を処理できるため、10進表現が機能する場合があります。しかし、浮動小数点値は機能しません。

シェルで計算を行うには、bcを介して値をパイプ処理し、それをコマンド置換(コマンドのバックティックラッパー)と組み合わせます。

set d = 2
set result = `echo "$d * 0.2224" | bc`
echo $result

この例の構文はcsh/tcsh向けに書かれていますが、原則はbashでも機能します。これよりも複雑なものが必要な場合は、代わりにpythonでスクリプトを実装することをお勧めします。

2
chaskes

ステートメント "set shift ="-1 2 ""は、このエラー「不正な形式の番号」を引き起こします。 cshスクリプトでは、操作文字と変数または数字の間にスペースが必要です。そのため、「set shift = "-1 2"」になります。

0
MrLi