gpt4 book ai didi

awk - 多个条件存储在变量中并用作 awk 中的 if 条件

转载 作者:行者123 更新时间:2023-12-01 23:30:32 24 4
gpt4 key购买 nike

表1.csv:

33622|AAA
33623|AAA
33624|BBB
33625|CCC
33626|DDD
33627|AAA
33628|BBB
33629|EEE
33630|FFF

目标:

33622|AAA
33623|AAA
33624|BBB
33625|CCC
33626|DDD
33627|AAA
33628|BBB

使用命令:

 awk 'BEGIN{FS="|";OFS="|"} {if($2=="AAA" && $2=="BBB" && $2=="CCC" && $2=="DDD"){print $1,$2}}' table1.csv

但是,尝试更加自动化,因为类别可能会增加。

list1.csv:
AAA BBB CCC DDD

list=`cat list1.csv`
awk -v list=$list 'BEGIN{FS="|";OFS="|"} {if($2==list){print $1,$2}}' table1.csv

这意味着,我可以使用 list1.csv 将 $2=="AAA"&& $2=="BBB"......存储到一个变量中吗?

预期输出:

33622|AAA
33623|AAA
33624|BBB
33625|CCC
33626|DDD
33627|AAA
33628|BBB

那么,关于将多个条件存储在一个变量中有什么建议吗?

谢谢大家!

最佳答案

$ awk 'NR==FNR{for(i=1;i<=NF;i++)a[$i];next}FNR==1{FS="|";$0=$0}($2 in a)' list table

输出:

33622|AAA
33623|AAA
33624|BBB
33625|CCC
33626|DDD
33627|AAA
33628|BBB

解释:

$ awk '
NR==FNR { # process list
for(i=1;i<=NF;i++) # hash all items in file
a[$i]
next # possibility for multiple lines
}
FNR==1 { # changing FS in the beginning of table file
FS="|"
$0=$0
}
($2 in a)' list table

关于awk - 多个条件存储在变量中并用作 awk 中的 if 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66346081/

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