【问题标题】:Combine END and another condition like in `$1<count || END`结合 END 和另一个条件,如 `$1<count ||结束`
【发布时间】:2014-10-12 18:00:27
【问题描述】:

回复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&lt;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

【问题讨论】:

  • ps:如果有明确的证据支持,“不可能”的说法当然是一个可能完美的答案。

标签: awk


【解决方案1】:

awk 脚本中的END 块仅在脚本处理完所有记录后才会执行。

因此,它可以被视为一个终结语句,其中没有读取当前记录以获得您期望的 $1。

简而言之,END 块只执行一次,显然是在最后。

你可以在哪里完美地使用|| 或者你有,在普通块中

例如

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

将打印$112 的所有记录。

用于输入

1
2
3
4

输出将是

1
2

【讨论】:

    猜你喜欢
    • 2011-12-14
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多