结合END和另一个条件,如$ 1

时间:2014-10-12 08:59:30

标签: awk

回答this question我写了以下awk代码

% cat mark_blocks
$1<count { print count; print "";
           for(i=1;i<=count;i++) print l[i]; }
# executed for each line
         { l[$1] = $0; count=$1}
END      { print count; print "";
           for(i=1;i<=count;i++) print l[i]; }
% 

我为$0<countEND条件所写的操作完全相同。

我觉得我可以写一个条件,如

$1<count||END{print count;print "";for(i=1;i<=count;i++)print l[i];}

但我得到的是

awk: e.awk:1: $1<count||END{print count;print "";for(i=1;i<=old;i++)print l[i]; }
awk: e.awk:1:           ^ syntax error

我已经搜索了一段时间的答案,但也许是因为英语不是我的母语,或者因为它不可能;-)我找不到答案。

有什么想法吗? TIA

1 个答案:

答案 0 :(得分:1)

仅当脚本处理完所有记录后,END脚本中的awk块才会被删除。

因此,可以将其视为最终确定声明,其中没有当前记录读取以获得您期望的$ 1。

简而言之,END区块只有一次,显然最终。

在正常的区块

中,你可以完美地使用||或你所拥有的

例如

awk '$1==1||$1==2{ print$0}'

将打印$112的所有记录。

用于输入

1
2
3
4

输出

1
2