2017-05-11 53 views
-1

我得到了一個使用兩個命令行參數的腳本。Bash腳本錯誤地處理命令行參數

./metagwastoolkit.run.sh metagwastoolkit.model1.conf metagwastoolkit.files.model1.list

後來在劇本我這樣做:

echo "cat meta.results.out | parseTable.pl --col VARIANTID,P_SQRTN,P_FIXED,P_RANDOM | awk ' $2 == 0 || $3 == 0 || $4 == 0 { print $1, $2, $3, $4 } ' > meta.results.needs_p_fixing.out" > meta.p_corrector.sh

,這是不生產我想要的東西,它產生:

cat meta.results.out | parseTable.pl --col VARIANTID,P_SQRTN,P_FIXED,P_RANDOM | awk ' metagwastoolkit.files.model1.list == 0 || == 0 || == 0 { print metagwastoolkit.model1.conf,metagwastoolkit.files.model1.list,, }' > meta.results.needs_p_fixing.out

所以把我的配置文件作爲$ 1和我的files.list作爲$ 2 ...這顯然不是w我想要的帽子......如果字段2,3或4等於0,我期望它能夠從管道打印第1列到第4列。

我該如何更改此...?

最佳,

桑德

+0

究竟什麼是它不這樣做的權利?如果它是一個變量覆蓋/替換問題,我懷疑你的'source $ {1}'可能會用當前源文件中的值覆蓋當前腳本中的變量名稱,但我並不關注你如何爭論「$ 1」和「$ 2」不包含你想要的東西? –

+1

當我讀到它時,你的'awk'** $ 2 == 0 || $ 3 == 0 || $ 4 == 0 {print $ 1,$ 2,$ 3,$ 4 **}''似乎沒有做你認爲的事。仔細檢查'awk'語法。 –

+0

我不明白這個問題。您從不在腳本的任何地方使用'CONFIGURATIONFILE'或'GWASFILE'。 – Barmar

回答

0

所以答案是,echo裏面的變量通過命令行參數,這是不是我的本意取代。解決方案是逃避$-符號。

的工作線路:

echo "cat meta.results.out | parseTable.pl --col VARIANTID,P_SQRTN,P_FIXED,P_RANDOM | awk '\$2 == 0 || \$3 == 0 || \$4 == 0 { print \$1, \$2, \$3, \$4 }' > meta.results.needs_p_fixing.out" > meta.p_corrector.sh

哪些我想要做什麼:取檢查列2,3,和管道的4場是否等於0和打印這些。

對@Barmar的好評讓我接觸到解決方案。

最佳,

桑德