簡體   English   中英

如何在bash腳本中將字符串或變量作為awk的多個參數傳遞?

[英]How to pass string or variable as multiple parameters for awk within a bash scripts?

我正在嘗試將變量$formula傳遞到awk腳本中:

[node2 filtering]$ echo $formula
$25 ~ "1/1" && $24 ~ "1/1" && $23 ~ "1/1" && $22 ~ "1/1" && $21 ~ "1/1" && $20 ~ "1/1" && $19 ~ "1/1" && $18 ~ "1/1" && $17 ~ "1/1" && $16 ~ "1/1" && $15 ~ "1/1" && $14 ~ "1/1" && $13 ~ "1/1" && $12 ~ "1/1" && $11 ~ "1/1" && $10 ~ "1/1"||$10 ~ "0/1" && $11 ~ "0/1" && $12 ~ "0/1" && $13 ~ "0/1" && $14 ~ "0/1" && $15 ~ "0/1" && $16 ~ "0/1" && $17 ~ "0/1" && $18 ~ "0/1" && $19 ~ "0/1" && $20 ~ "0/1" && $21 ~ "0/1" && $22 ~ "0/1" && $23 ~ "0/1" && $24 ~ "0/1" && $25 ~ "0/1"

我正在嘗試傳遞以下內容來過濾我的文本文件,但是當我執行此操作時,沒有過濾發生。 我也沒有錯誤。

awk -F\\t  -v myvar="$formula" 'myvar {print $0}' myfile

這有效:

awk -F\\t '$10 ~ "0/1" + $11 ~ "0/1"+ $12 ~ "0/1"+ $13 ~ "0/1"+ $14 ~ "0/1"{print $0}' myflies

我嘗試執行此操作的原因是我有一個簡單的for循環,該循環根據我要過濾的列數創建$formula 我決定要過濾的列數僅基於實驗中的主題數,並且始終為$10$(10+n) ,其中n是主題數。

關於如何解決此問題或以其他方式構造腳本的任何想法或技巧將不勝感激。

這是構造$formula的愚蠢的for循環:

blah1=$(echo "")
blah2=$(echo "")
for (( i=1; i <= $NUMBEROFSUBJECTS; i++ ))
    do
     l=$(echo $(( i + $minus )))``

    if [ $i == 1 ] ; then
             blah1=$(echo " \$$l ~ \"1/1\" ")
             blah2=$(echo " \$$l ~ \"0/1\" ")
    else
            inter1=$(echo " \$$l ~ \"1/1\" ")
            blah1=$(echo $inter1 + $blah1)

            inter2=$(echo " \$$l ~ \"0/1\" ")
            blah2=$(echo $blah2+$inter2)
    fi
done
formula=$(echo $blah1  " || " $blah2)`

這是我從以下地方獲得awk -F\\\\t -v myvar="$formula" 'myvar {print $0}'想法的地方:

如何在Bash腳本中的AWK中傳遞字符串作為參數

編輯:對我有用的答案最終是:

 awk -F\\t "$formula"'{print $0}' myfile

非常感謝大家。 抱歉,結果是如此簡單。

做這樣的事情:

formula="$blah1|$blah2"
...
awk "/$formula/ {...}"

因此,建議是跳過變量定義,而僅依靠外殼替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM