我必须过滤多列:
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
我需要的是,无论第一个条件的哪一部分为真,都应应用下一个真条件。
最佳答案
简单的解决方案是将 Cat
或 Dog
的前两个测试分组到一个正则表达式中,这样您的总条件就是一个 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/