我想在 Bash 中编写一个 while 循环,该循环运行在以下形式的文件的所有实例上
{number}.tst
例如,, 1.tst
, 2.tst
....50.tst
我不希望它在文件上运行tst.tst
。
我该怎么写这个?我想我将需要一个布尔短语并[0-9]*
在其中的某个地方,但我对语法并不完全确定。
我在 bash 脚本中有变量,我需要将其转移到 perl 中。我在 bash 脚本中声明了变量 $gal 和 $obsid,然后我调用了新程序。
gal=UCLA121
obsid=1896
./my_program
perl 脚本的开头加载带有短语的图像
$ph_im = "./$gal/img/${obsid}.img";
但新程序中的变量为 NULL。
我有一个存储为“1.20E20”的变量。我希望将其更改为“0.0120E22”。有没有一个简单的命令来改变这个值?我试过了
let nh=$nh/100
但这没有用;我认为这是因为变量中的字符值。我知道有多种解决方案;解决这个问题的最佳方法是什么?
我的文件结构是这样的。
unix% ls
NGC2201 IC0499 IC7216 NGC7169
unix% cd NGC2201
unix% ls
7019 2221 note
其中 7019 和 2221 是新目录,而 note 是我用来创建变量的文本文件。2221和7019内的内容很重要,但不需要设置为变量;我的脚本后记将处理所有这些。
我当前的脚本如下:
# The purpose of this script is to take the note files provided and set the values as variables.
#!/bin/csh -f
set z=`grep -E '^z=' note | cut -d= -f2`
set nh=`grep 'NH' note | cut -d= -f2`
set xc=`grep 'Center' note | cut -d, -f1 | cut '-d' -f4`
echo $z $nh $xc
这将设置三个变量在当前目录中使用(在这种情况下,我们将使用 NGC2201 作为父目录,并将 7019 和 2221 作为要使用这些变量的子目录)。
我的问题是如何编写脚本来自动将 NGC2201 设置为名为 $g 的变量,将 2221 设置为名为 $obs 的变量。
在脚本运行到 2221 之后,我希望它然后将目录设置为 7019 并重复这些步骤。在 NGC2201 中的目录完成后,我希望脚本移动到 IC0499,重复该过程等。
如何让脚本在目录中运行?我不能让它全球化,因为它不能太侵入;我需要它只深入两个目录才能令人满意。
如果可能,我想将它保留在 csh 中,但如果这在 tcsh 或 bash 中更容易,我完全赞成。此外,如果有比这样循环更简单的解决方案,我也完全赞成。
我目前正在使用 grep 在文件中查找字符串。但是,我得到了我不想要的结果。
示例输出:
user@user:~/tmp$ grep "z=" note > tmp.txt | cat tmp.txt
z=0.016728
S_1.4 GHz= 1597.61548 mJy, for L_1.4=1E24 W Hz^-1 (index=0.8)
我不想使用 grep 忽略 z=0.016728 之后的所有结果,因为我不能保证我使用的文件结构在 GHz= 之前总是有 z=。
我想忽略在 z= 之前没有换行符或字符值的任何内容。