如何在bash中比较两个awk结果值

如何在bash中比较两个awk结果值,bash,awk,Bash,Awk,这是我的密码: #!/bin/bash filename=$1 declare -a myarr myarr=($(awk '{print $2}' sim.count)) for((i=0 ;i<${#myarr[@]};i++)) do #echo ${myarr[$i]} #rm "${myarr[$i]}" awk '{if ($1 == "{$myarr[$i]}"){print $2}}' $filename > "${myarr[$i]}" done #/bin/

这是我的密码:

#!/bin/bash
filename=$1

declare -a myarr
myarr=($(awk '{print $2}' sim.count))
for((i=0 ;i<${#myarr[@]};i++))
do
#echo ${myarr[$i]}
#rm  "${myarr[$i]}"
awk '{if ($1 == "{$myarr[$i]}"){print $2}}' $filename > "${myarr[$i]}"
done
#/bin/bash
文件名=$1
声明-myarr
myarr=($(awk'{print$2}'模拟计数))
对于((i=0;i“${myarr[$i]}”
完成
我将awk结果存储到数组中,并运行循环以查找$filename的第1列是否具有相同的元素,然后打印第2列

我试过
if($1==“a | | | a”){print$2}

它工作得很好,但是如果($1==“{$myarr[$i]}”)不是我想要的结果,有什么问题吗?

这实际上是与
{$myarr[i]}
进行比较,而不是与shell变量中与该名称的条目相关联的值进行比较:

# original code: DOES NOT WORK (even if fixed to ${myarr[$i]})
awk '{if ($1 == "{$myarr[$i]}"){print $2}}'
这是因为双引号仍然在单引号内,因此字符串被传递给awk而不需要shell对其进行扩展——而且awk无法查看shell变量(环境中的变量除外,它需要显式语法来查找,并且无论如何都不适用于数组)


相反,将扩展值分别传递到
awk

awk -v tgt="${myarr[i]}" '{if ($1 == tgt) {print $2}}'

为什么不在awk本身中进行比较呢?使用
awk-v var=“$val”
将变量从shell传递到awk中——如果像这里演示的那样直接替换到代码中,就有可能遭到注入攻击。如果不需要索引本身,就没有必要对值进行索引;只需对“${myarr[@]}中的值进行
即可;do…:使用“$value”完成的操作
一般来说,
myarr=($(…)
是个坏消息——它进行全局扩展,而不仅仅是字符串拆分。使用
read-r-a myarr<这里的目标是什么?这对我来说就像一个错误。