使用awk将数组字符串与awk中的字符串进行比较

Bea*_*e96 2 unix bash awk

我想在bash中创建一个数组,使用awk将一个单词与一个数组中的字符串进行比较,到目前为止我有:

     name=( "name1" "name2" "name3" )
     num=0
     awk -F, '$2 == name[0] { num += $1 }; END { print num }'  ~Me/stuff/home.txt
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这不起作用,但如果我用"name1"替换名称[0],它工作正常.home.txt看起来像

     81920,name1
     84985,name2
     11000,name3
     71111,name1
     etc...
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

she*_*ter 5

awk无权访问您的shell变量,尤其是当您为awk代码使用单引号时.要使用您拥有的代码,您可以这样做

    awk -F, '$2 == "'"${name[0]}"'" { num += $1 }; END { print num }'  ~Me/stuff/home.txt
Run Code Online (Sandbox Code Playgroud)

上面我写了dbl-quote单引号dbl-quote围绕${name[0]}变量.这允许shell将shell环境中的值插入到awk代码的主体中.请注意,要比较值(使用==)$2,最好将该值视为awk中的字符串.所以在替换shell变量之后进行的比较是$2 == "name" { ...

您会发现在shell调试/跟踪标志之前运行此代码是有益的set -vx.set +vx在感兴趣的代码之后关闭跟踪/调试.

更好地传递这个价值

awk  -F, -v name="${name[0]}" '$2 == name { num += $1 }; END { print num }'  ~Me/stuff/home.txt
Run Code Online (Sandbox Code Playgroud)

产量

153031
Run Code Online (Sandbox Code Playgroud)

IHTH