我有一个文件(temp_4n.in),其中包含以下几行:
5 C 172.0696
5 C 135.6942
5 H 30.9062
5 H 31.8124
12 H 31.0377
12 O 293.0612
12 H 32.4678
我有一个脚本(testsc.txt),它将提取以某个数字开头的行的最后一个 H,我会定期更改:
grep $'^${mold}\tH' temp_4n.in | tail -1 > temp_5n.in
但是,当我使用以下命令运行脚本(例如,想要以 12 开头的行)时,它会失败:
qsub -v mold=12 ./testsc.txt
我认为这与 grep 命令中的第一个 '$' 被视为参数并被错误地替换有关。谁能帮我找出问题所在?
qsub -v varname=value
设置varname
为value
提交的作业环境中提供的。在您提交的脚本中,您在
grep
命令中使用此值,但包含该变量的字符串用单引号引起来,以防止 shell 扩展它。您的脚本应该改为使用
$
您的代码中的首字母($'...'
) 在这里不需要,而是我们[[:blank:]]
用来匹配空格或制表符。另一种方法是
awk
在您的脚本中使用:这使用字符串比较(不是正则表达式)来测试第一列和第二列,当找到匹配行时,整行保存在变量中
this
。最后,this
打印最后一个值。这取代了grep
和tail
。