我想使用 来计算文件中的行数wc -l
,但只输出数字,不输出后面的空格和文件名。根据评论编辑:文件名中可能包含数字。
目前如果我这样做:
wc -l /path/to/file
在一个有 176 行的文件上,输出是:
176 /path/to/file
这是在 bash 脚本中,结果数字将被分配为变量的值。
答案1
我会用:
<file wc -l
相反的是,它cat file | wc -l
不需要 fork shell 并运行另一个进程(并且运行速度更快):
% time </tmp/ramdisk/file wc -l
8000000
wc -l < /tmp/ramdisk/file 0,07s user 0,06s system 97% cpu 0,132 total
% time cat /tmp/ramdisk/file | wc -l
8000000
cat /tmp/ramdisk/file 0,01s user 0,16s system 80% cpu 0,204 total
wc -l 0,09s user 0,10s system 94% cpu 0,203 total
(/tmp/ramdisk/file
存储在 ramdisk 中以消除 I/O 和缓存问题。)
然而对于小文件来说,差异确实可以忽略不计。
另一种方法是:
wc -l file | cut -d ' ' -f 1
在我的测试中,其性能与 大致相同<file wc -l
。
答案2
您可以使用 cat 用简单的一行程序来完成此操作。
cat deluge1.log | wc -l
答案太简单了,不需要冗长的回答。
答案3
另一个更简洁的选项 wc -l filename | awk '{print $1}
文件中条目的示例列表
bash-4.1$ wc -l ../CBB_Nodes.txt | awk '{print $1}'
398
bash-4.1$
without awk it would have been as usual with the file name.
bash-4.1$ wc -l ../CBB_Nodes.txt
398 ../CBB_Nodes.txt
bash-4.1$