shell - 使用 awk 和逻辑运算符在 shell 脚本中过滤多列

标签 shell awk

我必须过滤多列:

1) File should have the word "Cat" or "Dog" 
2) Column 6 should be TRUE
3) Column 7 should be more than 7

我做到了:

awk -F',' '$5~/Cat/ || $5~/Dog && $6=="TRUE" && $7>=7' cat.csv > catFinal.csv

我需要的是,无论第一个条件的哪一部分为真,都应应用下一个真条件。

最佳答案

简单的解决方案是将 CatDog 的前两个测试分组到一个正则表达式中,这样您的总条件就是一个 3 组件 AND,例如测试1 && 测试2 && 测试3。您可以通过以下方式做到这一点:

 awk -F, '$5~/(Cat|Dog)/ && $6=="TRUE" && $7>=7' cat.csv > catFinal.csv

这将确保测试的所有方面都应用于每条记录。条件从左到右应用,因此在编写时,您将匹配 $5~/Cat/ 的任何记录或 $5~/Dog && $6=="TRUE 的记录"&& $7>=7 为真。

关于shell - 使用 awk 和逻辑运算符在 shell 脚本中过滤多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61980831/

相关文章:

bash - 如何禁用 cd 命令行?

linux - 我应该使用什么 Linux shell?

linux - 在 AWK 中可移植地处理任意参数

mongodb - 连接到在docker中执行shell后mongo断开连接

bash - 用 bash 合并两个并发程序的输出

bash - 在 Unix 中使用 shell 脚本删除超过 10 天的文件

shell - UNIX shell : sort a string by word length and by ASCII order ignoring case

linux - $0 在下面的 bash 脚本中代表什么?

linux - 如何在特定字符linux之后在行中添加一个空格

linux - grep -o 并使用 ls 显示部分文件名