如何计算文档中的行数?

我有这样的台词,我想知道我实际上有多少台词…

09:16:39 AM  all    2.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   94.0009:16:40 AM  all    5.00    0.00    0.00    4.00    0.00    0.00    0.00    0.00   91.0009:16:41 AM  all    0.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   96.0009:16:42 AM  all    3.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00   96.0009:16:43 AM  all    0.00    0.00    1.00    0.00    1.00    0.00    0.00    0.00   98.0009:16:44 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.0009:16:45 AM  all    2.00    0.00    6.00    0.00    0.00    0.00    0.00    0.00   92.00

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

1733895 次浏览

使用wc

wc -l <filename>

这将输出<filename>中的行数:

$ wc -l /dir/file.txt3272485 /dir/file.txt

或者,要从结果中省略<filename>,请使用wc -l < <filename>

$ wc -l < /dir/file.txt3272485

您也可以将数据通过管道传输到wc

$ cat /dir/file.txt | wc -l3272485$ curl yahoo.com --silent | wc -l63
wc -l <file.txt>

command | wc -l

使用wc

wc -l <filename>

要计算所有行,请使用:

$ wc -l file

要仅使用模式过滤和计数行:

$ grep -w "pattern" -c file

或者使用-v反转匹配:

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

请参阅grep手册页以查看-e、-i和-x参数…

有很多方法。使用wc是一种。

wc -l file

其他包括

awk 'END{print NR}' file

sed -n '$=' file(GNU Sed)

grep -c ".*" file

工具wc是UNIX和类UNIX操作系统中的“单词计数器”,但您也可以通过添加-l选项来使用它来计算文件中的行数。

wc -l foo将计算foo中的行数。您还可以通过管道输出像这样的程序:ls -l | wc -l,它会告诉您当前目录中有多少文件(加上一个)。

像这样使用nl

nl filename

man nl

将每个文件写入标准输出,并添加行号。随着没有FILE,或者当FILE为-时,读取标准输入。

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

wc -l < /filepath/filename.ext

如前所述,这些也有效(但由于其他原因而较差):

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

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

perl -lne 'END { print $. }'

$.包含行号,END块将在脚本末尾执行。

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

cat -n <filename>

将向您显示带有行号的文件的全部内容。

wc -l file.txt | cut -f3 -d" "

仅返回行数

将文件的输出重定向/管道传输到wc -l应该就足够了,如下所示:

cat /etc/fstab | wc -l

然后只提供行数。

我只是做了一个程序来做到这一点(用node

npm install gimme-linesgimme-lines verbose --exclude=node_modules,public,vendor --exclude_extensions=html

如果要检查目录中所有文件的总行,可以使用查找和wc:

find . -type f -exec wc -l {} +

我一直在用这个:

cat myfile.txt | wc -l

我更喜欢它而不是接受的答案,因为它不会打印文件名,你不必使用awk来修复它。接受的答案:

wc -l myfile.txt

但我认为最好的是GGB667的答案:

wc -l < myfile.txt

从现在开始我可能会使用它。它比我的方法略短。我正在采用我以前的方法,以防有人喜欢它。这两种方法的输出是相同的。

我在寻找计算多个文件行的方法时看到了这个问题,因此,如果您想计算. txt文件的多个文件行,您可以这样做,

cat *.txt | wc -l

它也将在一个. txt文件上运行;)

我知道这是,但仍然是:计数过滤行

我的文件看起来像:

Number of files sentCompany 1 file: foo.pdf OKCompany 1 file: foo.csv OKCompany 1 file: foo.msg OKCompany 2 file: foo.pdf OKCompany 2 file: foo.csv OKCompany 2 file: foo.msg ErrorCompany 3 file: foo.pdf OKCompany 3 file: foo.csv OKCompany 3 file: foo.msg ErrorCompany 4 file: foo.pdf OKCompany 4 file: foo.csv OKCompany 4 file: foo.msg Error

如果我想知道发送了多少文件,可以:

grep "OK" <filename> | wc -l

grep -c "OK" filename
cat file.log | wc -l | grep -oE '\d+'
  • grep -oE '\d+':为了返回数字只有

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

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

使用此命令计数行数并将结果存储在变量中:

计数=$(wc-l

wc -l不计算行。

是的,这个答案可能有点晚了,但我还没有找到任何人在答案中记录更强大的解决方案。

与流行的看法相反,POSIX根本不要求文件以换行符结尾。是的,POSIX 3.206系列的定义如下:

零个或多个非<换行符>字符加上终止字符的序列。

然而,许多人不知道的是,POSIX还将POSIX 3.195不完整线定义为:

文件末尾的一个或多个非字符的序列。

因此,没有尾随LF的文件是完全符合POSIX的。

如果您选择不支持这两种EOF类型,则您的程序不符合POSIX标准。

作为一个例子,让我们看看下面的文件。

1 This is the first line.2 This is the second line.

不管EOF如何,我相信你会同意有两行。你是通过查看已经启动的行来计算的,而不是查看已经终止的行。换句话说,根据POSIX,这两个文件都有相同的行数:

1 This is the first line.\n2 This is the second line.\n
1 This is the first line.\n2 This is the second line.

手册页对wc计数换行符相对清晰,换行符只是0x0a字符:

NAMEwc - print newline, word, and byte counts for each file

因此,wc甚至没有尝试计算你所谓的“行”。使用wc计数行很可能会导致错误计数,具体取决于输入文件的EOF。

符合POSIX的解决方案

你可以像上面的示例一样使用grep来计数线。此解决方案更加健壮和精确,并且它支持文件中一行的所有不同风格:

$ grep -c ^ FILE

wc -l <filename>

这将为您提供输出中的行数和文件名。

例如。

wc -l 24-11-2019-04-33-01-url_creator.log

产出

63 24-11-2019-04-33-01-url_creator.log

使用

wc -l <filename>|cut -d\ -f 1

以仅获取输出中的行数。

例如。

wc -l 24-11-2019-04-33-01-url_creator.log|cut -d\ -f 1

产出

63

这个可移植的shell函数[ℹ]非常有用。只需将以下片段添加到您的#0文件(或相当于您的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:]]}}

这应该与除了bashzsh之外的所有符合POSIX标准的外壳完全兼容。

wc-lfile_name

例如:wc-lfile.txt

它会告诉你文件中的行数

最后一行使用尾巴-1file_name

我尝试wc-l从文件名中获取行数

要进行更多过滤,例如要计算文件中注释行数,请使用grep'#'Filename.txt|wc-l

echo  "No of files in the file $FILENAME"wc -l < $FILENAMEecho total number of commented linesecho $FILENAMEgrep '#' $FILENAME | wc -l

awk保存生活时间(和行):

awk '{c++};END{print c}' < file

如果你想确保你没有计算空行,你可以这样做:

awk '{/^./ && c++};END{print c}' < file

如果你在像macOS这样的基于BSD的系统上,我会推荐gnu版本的wc。它不会像BSD wc那样在某些二进制文件上出现故障。至少它仍然是可用的性能。另一方面,BSD尾巴很慢………… zzzzzzzz……………

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

以防万一。结合找到命令使用许多文件都可以做到这一点。

find . -name '*.java' | xargs wc -l