如何在AWK命令中使用数字数组进行比较?

时间:2019-05-27 12:51:13

标签: bash

我有一个名为x的字符串。该数组包含12个以换行符分隔的数字。 (我只键入了"$x",就给了1\n2\n3\n4\n5\n6\n7\n8\n53\n54\n55 74。)在一个for循环中,我想检查循环索引是否与数组x的任何元素匹配。

这就是我尝试的方式。

echo $x  # This return 1 2 3 4 5 6 7 8 53 54 55 74
for ((i=1; i<=$(cat Reaction_names | wc -l); i++)); do
 Condition=$(awk 'BEGIN{print ('${i}'=='$x')?1:0}')
if [ $Condition = 1 ]
     then
       bla bla bla ......
fi

done

此代码会产生错误,例如“ 1 ^意外换行符或字符串结尾”

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找类似的东西:

for ((i=1; i<=$(cat Reaction_names | wc -l); i++)); do
    if grep -qx "$i" <<<"$x"; then
         echo "number $i found !"
    fi
done

您可以try it here

if grep -qx "$i" <<<"$x"; then行可以理解如下:

  • if command; then:如果命令返回的退出代码为零,则执行该代码(如果grep与某些内容匹配,则退出的代码为0,否则为其他代码)

    < / li>
  • grep的{​​{1}}标志使-q抑制其输出,由于只依赖退出代码,因此我们不需要此输出。

  • grep的{​​{1}}标志使其仅与全行匹配,这可确保在查找“ 12”时不与“ 123”匹配(正则表达式替代:匹配{{ 1}},而不是grep

  • -x是一个字符串,提供您的数字列表作为^12$的输入。