Bash脚本错误地处理命令行参数
我得到了一个使用两个命令行参数的脚本Bash脚本错误地处理命令行参数,bash,Bash,我得到了一个使用两个命令行参数的脚本 /metagwastolkit.run.sh metagwastolkit.model1.conf metagwastolkit.files.model1.list 稍后在脚本中,我将执行以下操作: echo“cat meta.results.out | parseTable.pl--col VARIANTID,p|SQRTN,p|u FIXED,p|RANDOM | awk'$2==0 | | | 3==0{print$1,$2,$3,$4}>meta r
/metagwastolkit.run.sh metagwastolkit.model1.conf metagwastolkit.files.model1.list
稍后在脚本中,我将执行以下操作:
echo“cat meta.results.out | parseTable.pl--col VARIANTID,p|SQRTN,p|u FIXED,p|RANDOM | awk'$2==0 | | | 3==0{print$1,$2,$3,$4}>meta results.需要p|u FIXED.out>meta p.p|u corrector.sh
这不是生产我想要的,而是生产:
cat meta.results.out | parseTable.pl--col VARIANTID,p|SQRTN,p|u FIXED,p|u RANDOM | awk'metagwastolkit.files.model1.list==0 | |==0 | print metagwastolkit.model1.conf,metagwastolkit.files.model1.list,}>meta.results.needs
因此,它将我的配置文件作为$1,将我的files.list作为$2…这显然不是我想要的…如果字段2、3或4等于0,我希望它从管道打印列1到4
我怎样才能改变这个
最好的
Sander因此答案是在echo
中,变量被命令行参数替换,这不是我的意图。解决方案是转义$
-符号
工作路线是:
echo“cat meta.results.out | parseTable.pl--col VARIANTID,p|SQRTN,p|u FIXED,p|RANDOM | awk'\$2==0 | | | 3==0{print\$1,\$2,\$3,\$4}meta results.需要p|u FIXED.out”>meta p|u corrector.sh
这就是我想要的:检查管道的第2列、第3列和第4列的字段是否等于0,然后打印这些字段
感谢@Barmar帮我找到了解决方案
最好的
桑德到底是什么做得不对??如果这是一个变量覆盖/替换问题,我怀疑您的源${1}
可能会用源文件中的值覆盖当前脚本中的变量名,但我不明白您是如何反驳参数$1
和$2
不包含您想要的内容的,您的awk'**$2==0 | | |$3==0 | | |$4==0{打印$1,$2,$3,$4**}'
似乎没有按照您的想法执行。仔细检查awk
语法。我不明白这个问题。您从未在脚本中的任何位置使用CONFIGURATIONFILE
或GWASFILE
。该awk
脚本看起来语法无效。您希望**
在awk
中做什么?因此,您遇到的问题是,shell变量被替换到awk
命令中。变量不会在单引号字符串中展开,所以我不认为这是可能的,除非您正在做一些您没有清楚显示的事情。