How to print number of lines of command output in UNIX shell
假设command1正在处理一些东西,我对command1的输出以及实际输出的行数感兴趣。
1 | $ command1 | wc - l |
打印command1的输出行数,而
1 | $ command1 | nl |
像这样打印:
1 2 3 4 5 6 | 1 ./PaDe014 2 ./PaDe033 3 ./PaDe001 4 ./PaDe013 5 ./PaDe025 6 ./PaDe028 |
看看如何计算文档中的行数?更多解决方案。
但是,我有兴趣生成这样的输出:
1 2 3 4 5 6 7 8 | ./PaDe014 ./PaDe033 ./PaDe001 ./PaDe013 ./PaDe025 ./PaDe028 Total number of files generated: 6 |
我有一种模糊的感觉,它可以用
实现所需输出的最简单方法是什么?
我也尝试过:
1 | command1 | tee >(wc -l) |
但这里一定有种族条件,因为我不时收到奇怪的结果。以下是测试输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | pdebski@PaDe:~$ (ls -l ; printf"Total:") | tee -a >(wc -l) total 56 drwxr-xr-x 7 pdebski pdebski 4096 cze 22 18:50 Data drwxr-xr-x 2 pdebski pdebski 4096 cze 22 15:14 Desktop drwxr-xr-x 2 pdebski pdebski 4096 cze 22 14:50 Documents drwxr-xr-x 2 pdebski pdebski 4096 cze 16 01:09 Downloads -rw-r--r-- 1 pdebski pdebski 8980 cze 16 01:04 examples.desktop drwxr-xr-x 4 pdebski pdebski 4096 cze 17 13:44 Music drwxr-xr-x 2 pdebski pdebski 4096 cze 22 13:14 Pictures drwxr-xr-x 2 pdebski pdebski 4096 cze 16 01:09 Public drwxr-xr-x 2 pdebski pdebski 4096 cze 16 01:09 Templates drwxrwxr-x 2 pdebski pdebski 4096 cze 22 01:21 test drwxrwxr-x 2 pdebski pdebski 4096 cze 22 01:21 test2 drwxr-xr-x 2 pdebski pdebski 4096 cze 16 01:09 Videos Total: pdebski@PaDe:~$ 13 |
对于Dijkstra的信号量和互斥量的需求,这是一个很好的例子,不是吗?(见https://en.wikipedia.org/wiki/edsger_w._dijkstra)
显然这里应该有一些
相同结果:
1 | $ (ls -l && printf"Total:") | tee -a >(wc -l) |
使用过程替换:
1 | command1 | tee >(wc -l) |
或者,对于附加生成的文件总数前缀:
1 | (command1 && printf"Total number of files generated:") | tee >(wc -l) |
参考文献:https://unix.stackexchange.com/questions/28503/how-can-i-send-stdout-to-multiple-commands
我不知道你所说的"最简单"是什么意思,但对我来说,最简单的解决方案是:
1 2 | command1 | awk '1; END { print" total number of lines:", NR }' |