Ponto flutuante no CSH?

1

Eu tenho tentado executar este script, mas ele fornece o erro "número mal formado" devido ao decimal 0.2224. Se eu substituí-lo com qualquer inteiro, o script funciona bem.

#!/bin/csh -f

set shift="-1 2  "

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

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

2 respostas

2

As variáveis do shell são strings, não números. Quando você digita 2 ou "0.2224" , ele é visto como uma string. O shell pode manipular algumas conversões de dados simples, portanto expressões decimais podem funcionar; mas os valores de ponto flutuante não funcionarão.

Para fazer matemática no shell, você pode canalizar os valores através de bc e combiná-los com a substituição de comandos (os invólucros de backtick ao redor do comando):

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

A sintaxe deste exemplo foi escrita para csh/tcsh , mas o princípio também funciona em bash . Se você precisar de algo mais complicado do que isso, talvez queira implementar seu script em python .

    
por chaskes 01.06.2016 / 18:23
0

A declaração "set shift=" - 1 2 "" causa este erro "número mal formado". Em scripts csh, deve haver espaço entre caracteres operacionais e variáveis ou números. Portanto, deve ser "set shift=" -1 2 ".

    
por MrLi 24.06.2018 / 07:25