在 csh 脚本中使用文件输入变量

在 csh 脚本中使用文件输入变量
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 shell。请使用 Bourne shell。

答案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 ' '`"

相关内容