gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:55 24 4
gpt4 key购买 nike

我正在尝试将变量 $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}' 想法的地方:

Howto Pass A String as Parameter in AWK within Bash Script

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

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

非常感谢大家。抱歉,事情变得如此简单。

最佳答案

做这样的事情:

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

因此建议跳过变量定义,只依赖于 shell 替换。

关于linux - 如何在 bash 脚本中将字符串或变量作为 awk 的多个参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33241526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com