我有这样的线,我想知道我有多少行。

09:16:39 AM  all    2.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   94.00
09:16:40 AM  all    5.00    0.00    0.00    4.00    0.00    0.00    0.00    0.00   91.00
09:16:41 AM  all    0.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   96.00
09:16:42 AM  all    3.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00   96.00
09:16:43 AM  all    0.00    0.00    1.00    0.00    1.00    0.00    0.00    0.00   98.00
09:16:44 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
09:16:45 AM  all    2.00    0.00    6.00    0.00    0.00    0.00    0.00    0.00   92.00

是否有一种方法可以使用linux命令来计算它们?


当前回答

如果你想要的只是行数(而不是行数和返回的愚蠢的文件名):

wc -l < /filepath/filename.ext

正如前面提到的,这些方法也有效(但由于其他原因,效果较差):

awk 'END{print NR}' file       # not on all unixes
sed -n '$=' file               # (GNU sed) also not on all unixes
grep -c ".*" file              # overkill and probably also slower

其他回答

使用wc:

wc -l <filename>

如果你使用的是某种基于bsd的系统,比如macOS,我建议你使用gnu版本的wc。它不会像BSD wc那样在某些二进制文件上出错。至少它仍然是可用的性能。另一方面,BSD的尾巴是缓慢的 ............ zzzzzzzzzz ...........

至于AWK,只有一个小警告——因为它在默认的行假设下运行,也就是\n,如果你的文件恰好没有一个尾随的新行分隔符,AWK会比BSD或GNU wc多计算1。同样,如果你在管道中完全没有新行,比如echo -n,这取决于你是在END{}部分还是FNR==1测量,NR将是不同的。

这个drop-in便携式shell函数[ℹ]工作起来很有魅力。只需将以下代码片段添加到.bashrc文件(或shell环境的等效文件)。

# ---------------------------------------------
#  Count lines in a file
#
#  @1 = path to file
#
#  EXAMPLE USAGE: `count_file_lines $HISTFILE`
# ---------------------------------------------
count_file_lines() {
    local subj=$(wc -l $1)
    subj="${subj//$1/}"
    echo ${subj//[[:space:]]}
}

除了bash和zsh之外,它应该完全兼容所有posix兼容的shell。

正如其他人所说,wc -l是最好的解决方案,但为了将来参考,你可以使用Perl:

perl -lne 'END { print $. }'

美元。包含行号和END块将在脚本的末尾执行。

有很多方法。使用wc就是其中之一。

Wc -l文件

其他包括

awk ' end {print NR}'文件

sed -n '$='文件

grep -c ".*" file