换句话说,当我写:
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总结
以上是内存溢出为你收集整理的linux – Perl one-liner是可以为每个文件arg执行END块执行全部内容,希望文章能够帮你解决linux – Perl one-liner是可以为每个文件arg执行END块执行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)