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

时间:2016-05-24 15:01:17

标签: 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

我将awk结果存储到数组并运行循环以查找$ filename的第一列是否具有相同的元素然后打印第二列

我试过if ($1 == "a|||a"){print $2} 它运作良好,但if ($1 == "{$myarr[$i]}")不是我想要的结果,有什么不对吗?

1 个答案:

答案 0 :(得分:2)

这是与{$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}}'