加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Perl one-liner是可以为每个文件arg执行END块执行

发布时间:2020-12-14 01:23:35 所属栏目:Linux 来源:网络整理
导读:对于Perl单行,当使用-p或-n标志时,是否可以使END {}块对每个文件执行一次,而不是仅对整个程序执行一次? 换句话说,当我写: perl -ne '$count++ if/.../; END {print "$ARGV: $count" if $count 0}' mysourcedir/*.html 我想为每个文件执行一次END块,而不是
对于Perl单行,当使用-p或-n标志时,是否可以使END {}块对每个文件执行一次,而不是仅对整个程序执行一次?

换句话说,当我写:

perl -ne '$count++ if/.../; END {print "$ARGV: $count" if $count > 0}' mysourcedir/*.html

我想为每个文件执行一次END块,而不是在程序执行结束时全局执行一次.

目前我只是使用xargs,但想知道Perl是否可能有一些替代标志的行为.

echo mysourcedir/*.html | xargs -n1 perl -ne '$count++ if/.../; END {print "$ARGV: $count" if $count > 0}'

PS – 如果你想知道我为什么不只是grep | wc -l对于这个简单的情况,这是因为这个例子是从我的实际用例中简化的,它在计数器中同时涉及incr()和decr( – )

答:基于@ mpapec的技术,加上一个小调整也可以重置每个文件的$count var,我得到这个有效:

perl -ne '$count++ if/.../; if (eof && $count > 0) {print "$ARGV: $count"; $count = 0;} ' mysourcedir/*.html

解决方法

您可以检查eof以查找每个文件的结尾,

perl -ne '$count++ if/.../; eof && sub{ print "$ARGV: $count" if $count > 0 }->()' mysourcedir/*.html

要么

perl -ne '$count++ if/.../; eof && do{ print "$ARGV: $count" if $count > 0 }' mysourcedir/*.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读