首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多个条件存储在变量中,并用作awk中的if条件

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

Stack Overflow用户
提问于 2021-02-24 14:59:55
回答 2查看 48关注 0票数 2

table1.csv:

代码语言:javascript
运行
复制
33622|AAA
33623|AAA
33624|BBB
33625|CCC
33626|DDD
33627|AAA
33628|BBB
33629|EEE
33630|FFF

目标:

代码语言:javascript
运行
复制
33622|AAA
33623|AAA
33624|BBB
33625|CCC
33626|DDD
33627|AAA
33628|BBB

使用命令:

代码语言:javascript
运行
复制
awk 'BEGIN{FS="|";OFS="|"} {if($2=="AAA" && $2=="BBB" && $2=="CCC" && $2=="DDD"){print $1,$2}}' table1.csv

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

代码语言:javascript
运行
复制
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

这意味着,我可以存储$2=="AAA“&& $2=="BBB”.通过使用list1.csv转换为变量?

预期输出:

代码语言:javascript
运行
复制
33622|AAA
33623|AAA
33624|BBB
33625|CCC
33626|DDD
33627|AAA
33628|BBB

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

谢谢大家!

EN

Stack Overflow用户

发布于 2021-02-24 15:55:49

与James Brown的回答几乎相同的逻辑,只是在这里添加了一个小变量,即在输入中设置字段分隔符_文件放在自己的位置。

代码语言:javascript
运行
复制
awk 'FNR==NR{for(i=1;i<=NF;i++){arr[$i]};next} ($2 in arr)' list FS="|" table

解释:添加以上详细解释。

代码语言:javascript
运行
复制
awk '                   ##Starting awk program from here.
FNR==NR{                ##Checking condition which will be TRUE when list is being read.
  for(i=1;i<=NF;i++){   ##Going through all fields here.
    arr[$i]             ##Creating arr with index of current column value here.
  }
  next                  ##next will skip all further statements from here.
}
($2 in arr)             ##Checking condition if 2nd field is present in arr then print that line from table file.
' list FS="|" table     ##mentioning Input_file(s) here and setting FS as | before table file.
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66346081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档