2014-05-25 6 views
0

J'ai un fichier texte contient des colonnes de données comme ceci:Faire Math Shell Script

col1  col2 col3 col4 col5 col6 col7 col8 col9 col10 

50.000 7.920 0.509 11.2 2.60 192.7 25.71 0.3490 188.6 17.81 
50.170 7.920 0.609 12.2 2.72 211.7 26.17 0.3326 213.8 18.19 
50.330 7.920 0.712 14.1 2.92 218.9 28.17 0.3228 215.1 21.73 
... 

Je veux créer un fichier texte délimité (un script bash en utilisant) dérivé de la première qui ses colonnes ont valeurs que celles-ci:

col1  col2  col3  col3*[-sin(col6)]  col3*[-cos(col6)] 
... 

sin est fonction sinusoïdale et cos est fonction cosinus en mathématiques. Comment dois-je faire cela?

Merci d'avance.

+0

Si vous commencez à avoir ce genre de besoins, probablement bash n'est plus le bon outil pour le travail. Je ne dis pas que vous ne pouvez pas le faire (avec des combinaisons maladroites de couper/expr/inline awk/Perl), mais il serait beaucoup plus simple d'écrire et plus facile à lire juste pour l'écrire dans un "vrai" langage . –

Répondre

1

Ma version plus longue en utilisant bc:

awk '{printf "%f * -s (%f);\n", $3, $6}' < input.txt | bc -l > col4.txt 
awk '{printf "%f * -c (%f);\n", $3, $6}' < input.txt | bc -l > col5.txt 
awk '{print $1, $2, $3}' < input.txt | paste -d " " - col4.txt col5.txt 
2

Essayez cette commande awk,

awk '{var=$3*-sin($6); foo=$3*-cos($6); print $1,$2,$3,var,foo;}' file