使用awk和逻辑运算符筛选shell脚本中的多个列

使用awk和逻辑运算符筛选shell脚本中的多个列,shell,awk,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 我需要的是,在第一个条件的哪一部分为真之后,下一个为

我必须过滤多个列:

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分量,例如
test1&&test2&&test3
。您可以通过以下方式实现:

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

这将确保测试的所有方面都适用于每个记录。这些条件从左到右应用,因此在编写时,您可以匹配
$5~/Cat/
中的任何记录或
$5~/Dog&&&$6==“TRUE”中的记录&&&$7>=7
是正确的。

简单的解决方案是将
Cat
Dog
的前两个测试分组到一个正则表达式中,这样您的总条件是一个三分量,例如
test1&&test2&&test3
。您可以通过以下方式实现:

 awk -F, '$5~/(Cat|Dog)/ && $6=="TRUE" && $7>=7' cat.csv > catFinal.csv
这将确保测试的所有方面都适用于每个记录。这些条件是从左到右应用的,因此在编写时,您可以匹配
$5~/Cat/
$5~/Dog&&$6==“TRUE”&&$7>=7
为TRUE的任何记录。

您的问题包括:,可测试的样本输入和预期输出,并告诉您是否尝试进行部分匹配或完全匹配,以及您是否希望每个值都匹配regexp或字符串(例如,如果单词
突变
出现在一行中-是否匹配
Cat
?是否匹配
Cat
匹配
C.t
)?。为什么第1项说
\u文件应该有,…
,而第2项和第3项识别特定字段-可以
Cat
出现在行中的任何位置?同时告诉我们你发布的脚本有什么问题?是不是你要寻求帮助的语法错误?看见你的问题包括简洁、可测试的样本输入和预期输出,并告诉他们你是否尝试进行部分匹配或完全匹配,以及你是否希望为每个值进行regexp或字符串匹配(例如,如果单词
突变
出现在一行中-匹配
Cat
?匹配
Cat
匹配
C.t
)?为什么第1项说
\u文件应该有,…
,而第2项和第3项识别特定字段-可以
Cat
出现在行中的任何位置?同时告诉我们你发布的脚本有什么问题?是不是你要寻求帮助的语法错误?看见