Verwenden einer Datei zum Eingeben von Variablen in CSH-Skripten

Verwenden einer Datei zum Eingeben von Variablen in CSH-Skripten
unix%:~/tmp$ cat tmp.txt 
z=0.016728
NH=5.7E20
Center for spectra: 2:00:14.906, +31:25:45.826

Ich möchte, dass der Wert von zauf eine Variable namens gesetzt wird $redsh, der Wert von NHist $abunund die Werte für das Zentrum jeweils $xcund sind $yc.

Wie gehe ich dabei vor?

Antwort1

sedIch würde zum Ersetzen der Werte aus der Datei Folgendes verwenden , hinzufügen und das Ganze setausführen :eval

eval `sed 's/z=/set redsh=/;s/NH=/abun=/;s/.*: \(.*\), \(.*\)/xc=\1 yc=\2/' tmp.txt`

Beispielausführung

% unset redsh abun xc yc
% cat tmp.txt
z=0.016728
NH=5.7E20
Center for spectra: 2:00:14.906, +31:25:45.826
% eval `sed 's/z=/set redsh=/;s/NH=/abun=/;s/.*: \(.*\), \(.*\)/xc=\1 yc=\2/' tmp.txt`
% set
abun    5.7E20
redsh   0.016728
xc      2:00:14.906
yc      +31:25:45.826

Beachten Sie jedoch Folgendes:Sie sollten nicht die C-Shell verwenden. Verwenden Sie die Bourne-Shell.

Antwort2

Lesen Sie man csh;man grep;man cut;man awk;man trund tun Sie etwas wie

set redsh = "`grep -E '^z=' tmp.txt | cut -d= -f2`"
set abun = "`grep -E '^NH=' tmp.txt | cut -d= -f2`"
set xc = "`grep -E '^Center for spectra: ' tmp.txt | cut -d, -f1 | cut '-d ' -f4`"
set yc = "`grep -E '^Center for spectra: ' tmp.txt | cut -d, -f2 | tr -d ' '`"

verwandte Informationen