gpt4 book ai didi

linux - Perl one-liner 是否可以为给定的每个文件 arg 执行 END block

转载 作者:IT王子 更新时间:2023-10-29 00:57:47 25 4
gpt4 key购买 nike

对于 Perl 单行代码,当使用 -p-n 标志时是否可以使 END {} block 执行每个文件一次,而不是整个程序一次?

换句话说,当我写:

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

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

目前我只是为此使用 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 变量,我得到了这个有效的方法:

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 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20198881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com