Lib*_*bux 41 command-line shell bash debian
我正在尝试计算某个程序产生的输出行数。问题是,程序需要很长时间才能运行,我想将输出显示给用户。有没有办法计算最后一个命令输出的行数?
我可以做,program | wc -l
但这不会向用户显示输出。因此,据我所知,我必须这样做program; program | wc -l
- 但该程序至少需要一分钟才能运行,所以我不想为了在底部显示行数而多次执行此操作。
编辑:
phe*_*mer 52
您可以使用tee
拆分输出流wc
,像往常一样将一个副本发送到 STDOUT,将另一个副本发送到 STDOUT。
program | tee >(wc -l)
Run Code Online (Sandbox Code Playgroud)
的>(cmd)
是bash的语法该装置运行cmd
和替换>(cmd)
用的路径(连接到一个命名管道),该程序的STDIN位。
jor*_*anm 13
一种选择是使用 awk,它可以进行计数并打印到标准输出。
program | awk '{ print } END { print NR }'
Run Code Online (Sandbox Code Playgroud)
在 中awk
,NR 是当前行号。你可以用 perl 完成同样的事情:
program | perl -pe 'END {print "$.\n"}'
Run Code Online (Sandbox Code Playgroud)
或者sed
:
program | sed -n 'p;$='
Run Code Online (Sandbox Code Playgroud)
小智 7
我最喜欢的选择:
program | grep "" -c
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以在 stderr 上克隆 stdout。
program | tee /dev/stderr | wc -l
Run Code Online (Sandbox Code Playgroud)
这样,program
的 stdout 将通过管道tee
写入 stderr,后者打印在控制台上。tee
还将通过管道传输到它的数据写入其标准输出,后者通过管道传输到wc
.
归档时间: |
|
查看次数: |
67514 次 |
最近记录: |