使用'和'和'或'声明结合在' if声明'在bash中使用awk

时间:2018-02-15 02:02:30

标签: bash awk

我正在尝试将&&||合并为“如果声明'在awk。这基本上就是我在做的事情:

awk '{if( ($3=="/M" && $4>=35) || ($3 =="/M" && $5 = "/Married" && $4 >= 25) || ($3 == "/F" && $4 = 36) )} {print}'  

我的陈述没有按预期工作。相反,它返回一个错误。此问题中是否存在语法错误,还是需要重新表述?请帮忙。

这就是文件的样子:

Kamila Haynes F 52 Single 2015 604-555-8291 76102
Aliana Hardin F 45 Single 2016 236-555-5788 66456
Charlee Ortega F 24 Single 2016 604-555-8187 85009
Ryan Nelson M 25 Married 2017 604-555-2323 44715   
Ruth Contreras F 49 Single 2016 604-555-8829 64391    
Adrienne Gould F 23 Single 2017 604-555-7973 72203    
Kayson Blair M 40 Married 2016 778-555-6806 69082    
Alexia Hardy F 40 Married 2015 778-555-6684 72270    
Lochlan Bradshaw M 27 Single 2016 236-555-7631 66518    
Mohammed Allison M 27 Single 2016 778-555-4204 70087

这是所需的输出需要:

所有35岁或以上的男性,以及所有25岁或以上的已婚男性都需要删除。此外,所有不完全36岁的女性也需要被删除。输出可能不存在(" next"命令可能在这里使用)。

编辑: 这就是输出的样子:

Kamila Haynes F 52 Single 2015 604-555-8291 76102 Aliana Hardin F 45 Single 2016 236-555-5788 66456 Charlee Ortega F 24 Single 2016 604-555-8187 85009 Ruth Contreras F 49 Single 2016 604-555-8829 64391 Adrienne Gould F 23 Single 2017 604-555-7973 72203 Alexia Hardy F 40 Married 2015 778-555-6684 72270 Lochlan Bradshaw M 27 Single 2016 236-555-7631 66518 Mohammed Allison M 27 Single 2016 778-555-4204 70087

1 个答案:

答案 0 :(得分:1)

请您试着跟随并告诉我这是否对您有所帮助:

awk '!($3=="M" && $4>=35) && !($3=="F" && $4>=25) && !($3=="F" && $4!=36)'   Input_file

<强> 说明:

!($3=="M" && $4>=35):此条件将检查第3个字段(我相信它总是GENDER字段)是M还是4字段(我相信它总是AGE字段)所以检查第3个字段是否为3 M和第4个字段在开始时大于或等于35 !将取消条件(使其与条件相反),因此它将删除所有那些男性年龄大于35岁的行。 / p>

&&:两个条件之间的条件意味着两个条件都应该为TRUE。

!($3=="F" && $4>=25):如果女性和年龄超过25岁的人不应该打印,请在此处查看。

&& !($3=="F" && $4!=36)':&amp;&amp;确保所有条件都应该为TRUE,并且条件是我放置的是如果第3个字段中的行具有女性值且第4个字段不等于36则跳过该行。