gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:35:09 24 4
gpt4 key购买 nike

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

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

出于某种原因,这不起作用,但如果我将 name[0] 替换为“name1”,它就可以正常工作。 home.txt 看起来像

     81920,name1
84985,name2
11000,name3
71111,name1
etc...

如有任何帮助,我们将不胜感激。

最佳答案

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

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

上面我在 ${name[0]} 变量周围写了 dbl-quote 单引号 dbl-quote。这允许 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

输出

153031

健康教育

关于bash - 使用 awk 将数组字符串与 awk 中的字符串进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34004896/

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