Foobar Asked: 2022-11-03 01:25:51 +0800 CST2022-11-03 01:25:51 +0800 CST 2022-11-03 01:25:51 +0800 CST 如何实时更新`wc -l`? 772 我有一个命令<streaming ls> | wc -l,它工作正常,但<streaming ls>需要一段时间,这意味着我要等几分钟后才能得到最终的行数。 有没有办法wc -l实时输出更新? shell-script 3 个回答 Voted Best Answer Stephen Kitt 2022-11-03T01:32:16+08:002022-11-03T01:32:16+08:00 您不能wc -l为此使用,但您可以使用其他工具(例如 AWK)生成运行的行数: <streaming ls> | awk '{ printf "%d\r", NR } END { print NR }' 这将更新每次看到一行时看到的行数,并在进程结束时以总行数结束。 对于产生大量输出的命令,可以通过每n行打印一次来减少开销: … | awk 'NR % 10 == 0 { printf "%d\r", NR } END { print NR }' (对于n = 10)或每秒打印一次: … | awk 'systime() > lasttime { lasttime = systime(); printf "%d\r", NR } END { print NR }' (或每n秒通过将条件更改为>= lasttime + n)。 Stéphane Chazelas 2022-11-03T12:03:07+08:002022-11-03T12:03:07+08:00 你可以pv用来给你一些进度报告: cmd | pv -lbtr | wc -l -l对于基于行的(报告行数而不是字节数)。 -b报告字节数(这里的行是因为-l) -t报告花费的时间 -r报告当前速率(每秒行数;另请参阅-a平均速率)。 请注意,文件名可以由多行组成,因此除非您使用类似or的选项将文件名中的换行符转义为or ,否则不能保证wc -l输出为ls您提供文件计数。-b-q\n? hocikto 2022-11-04T01:19:53+08:002022-11-04T01:19:53+08:00 好吧,我曾经使用过类似的东西watch -n 1 your command,不确定这对您的情况是否有用,我不是大师,只是我想到的第一件事。 https://man7.org/linux/man-pages/man1/watch.1.html watch - 定期执行程序,全屏显示输出 -n, --interval seconds 指定更新间隔。该命令不允许超过 0.1 秒的时间间隔,在该时间间隔内转换较小的值。两个都 '。' 和 ',' 适用于任何语言环境。WATCH_INTERVAL 环境可用于永久设置非默认间隔(遵循相同的规则和格式)。
您不能
wc -l
为此使用,但您可以使用其他工具(例如 AWK)生成运行的行数:这将更新每次看到一行时看到的行数,并在进程结束时以总行数结束。
对于产生大量输出的命令,可以通过每n行打印一次来减少开销:
(对于n = 10)或每秒打印一次:
(或每n秒通过将条件更改为
>= lasttime + n
)。你可以
pv
用来给你一些进度报告:-l
对于基于行的(报告行数而不是字节数)。-b
报告字节数(这里的行是因为-l
)-t
报告花费的时间-r
报告当前速率(每秒行数;另请参阅-a
平均速率)。请注意,文件名可以由多行组成,因此除非您使用类似or的选项将文件名中的换行符转义为or ,否则不能保证
wc -l
输出为ls
您提供文件计数。-b
-q
\n
?
好吧,我曾经使用过类似的东西
watch -n 1 your command
,不确定这对您的情况是否有用,我不是大师,只是我想到的第一件事。https://man7.org/linux/man-pages/man1/watch.1.html