unix%:~/tmp$ cat tmp.txt
z=0.016728
NH=5.7E20
Center for spectra: 2:00:14.906, +31:25:45.826
Я хотел бы, чтобы значение z
было установлено для переменной с именем $redsh
, значение NH
было бы равно $abun
, а значения для центра были бы равны $xc
и $yc
соответственно.
Как мне это сделать?
решение1
Я бы sed
заменил значения из файла, добавил set
и запустил eval
все это:
eval `sed 's/z=/set redsh=/;s/NH=/abun=/;s/.*: \(.*\), \(.*\)/xc=\1 yc=\2/' tmp.txt`
Пример запуска
% 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
Однако следует отметить, что:Вам не следует использовать оболочку C. Используйте оболочку Bourne.
решение2
Прочитайте man csh;man grep;man cut;man awk;man tr
и сделайте что-нибудь вроде
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 ' '`"