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

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命令来计算它们?


当前回答

这个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 < /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 -l file

使用以下命令过滤和计数带有图案的行:

$ grep -w "pattern" -c file  

或者使用-v来逆匹配:

$ grep -w "pattern" -c -v file 

查看grep手册页,查看-e,-i和-x参数…

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

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

或者用文件名模式计算子目录中的所有行(例如,文件名中带有时间戳的logfiles):

wc -l ./**/*_SuccessLog.csv

以上是首选的方法,但“cat”命令也可以帮助:

cat -n <filename>

将显示文件的全部内容与行号。