我正在尝试将&&
和||
合并为“如果声明'在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
答案 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则跳过该行。