如何在bash脚本中将字符串或变量作为awk的多个参数传递?

时间:2015-10-20 16:08:05

标签: linux bash shell variables awk

我正在尝试将变量$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}'获得 awk -F\\t "$formula"'{print $0}' myfile 想法的地方:

Howto Pass A String as Parameter in AWK within Bash Script

编辑: 对我有用的答案最终是:

<asp:HyperLink ID="HyperLink1" runat="server" 
NavigateUrl='<%# Eval("uname", "~/XsProfile.aspx?uname={0}") %>'>
<%# Eval("uname")%>
</asp:HyperLink>

非常感谢大家。对不起,它结束了这么简单。

1 个答案:

答案 0 :(得分:2)

做这样的事情:

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

所以提议是跳过变量定义,只依赖于shell替换。