gpt4 book ai didi

arrays - 在 awk 中使用 bash 变量作为数组并通过与数组比较来过滤输入文件

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

我有这样的 bash 变量:

val="abc jkl pqr"

我有一个看起来像这样的文件:

abc   4   5
abc 8 8
def 43 4
def 7 51
jkl 4 0
mno 32 2
mno 9 2
pqr 12 1

我想从文件中删除第一个字段不在 val 中的行:

abc   4   5
abc 8 8
jkl 4 0
pqr 12 1

我在 awk 中的解决方案根本不起作用,我不知道为什么:

awk -v var="${val}" 'BEGIN{split(var, arr)}$1 in arr{print $0}' file

最佳答案

只是slice the variable into array indexes :

awk -v var="${val}" 'BEGIN{split(var, arr)
for (i in arr)
names[arr[i]]
}
$1 in names' file

如链接问题中所述,当您调用 split() 时,您会获得数组的值,而您想要设置的是索引。诀窍是使用此内容生成另一个数组。

如您所见,$1 in names 就足够了,发生这种情况时您不必调用操作 {print $0},因为它是默认设置。

单行:

$ awk -v var="${val}" 'BEGIN{split(var, arr); for (i in arr) names[arr[i]]} $1 in names' file
abc 4 5
abc 8 8
jkl 4 0
pqr 12 1

关于arrays - 在 awk 中使用 bash 变量作为数组并通过与数组比较来过滤输入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41591828/

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