我有这样的行,我想知道实际上有多少行......
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命令统计它们?
答案 0 :(得分:1709)
使用wc
:
wc -l <filename>
这将输出<filename>
中的行数:
$ wc -l /dir/file.txt
3272485 /dir/file.txt
或者,要从结果中省略<filename>
,请使用wc -l < <filename>
:
$ wc -l < /dir/file.txt
3272485
您也可以将数据传输到wc
:
$ cat /dir/file.txt | wc -l
3272485
$ curl yahoo.com --silent | wc -l
63
答案 1 :(得分:130)
要计算所有行数:
$ wc -l file
仅过滤和计算使用模式的行:
$ grep -w "pattern" -c file
或使用-v反转匹配:
$ grep -w "pattern" -c -v file
请参阅grep手册页以查看-e,-i和-x args ......
答案 2 :(得分:67)
wc -l <file.txt>
或者
command | wc -l
答案 3 :(得分:42)
有很多方法。使用wc
就是一个。
wc -l file
其他包括
awk 'END{print NR}' file
sed -n '$=' file
(GNU sed)
grep -c ".*" file
答案 4 :(得分:25)
工具wc
是UNIX和类UNIX操作系统中的“字计数器”,您还可以通过添加-l
选项使用它来计算文件中的行,因此{{ 1}}将计算wc -l foo
中的行数。您还可以通过以下程序管道输出:foo
,它将告诉您当前目录中有多少文件。
答案 5 :(得分:22)
如果要检查目录中所有文件的总行数,可以使用find和wc:
find . -type f -exec wc -l {} +
答案 6 :(得分:21)
使用wc
:
wc -l <filename>
答案 7 :(得分:13)
如果您想要的只是行数(而不是行数和返回的愚蠢文件名):
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
答案 8 :(得分:7)
我一直在用这个:
cat myfile.txt | wc -l
我比接受的答案更喜欢它,因为它不打印文件名,你不必使用awk
来修复它。接受的答案:
wc -l myfile.txt
但我认为最好的是GGB667的答案:
wc -l < myfile.txt
我可能会从现在开始使用它。它比我的方式略短。如果有人喜欢的话,我会用我原来的方式做这件事。这两种方法的输出相同。
答案 9 :(得分:6)
像这样使用nl
:
nl filename
来自man nl
:
将每个FILE写入标准输出,并添加行号。同 没有FILE,或者当FILE是 - 时,读取标准输入。
答案 10 :(得分:5)
wc -l
不计算行数。是的,这个答案可能晚了一些,但是我还没有找到任何人在答案中提供更可靠的解决方案。
与流行的看法相反,POSIX完全不需要文件以换行符结尾。是的,POSIX 3.206 Line的定义如下:
一个零个或多个非
字符加上一个终止字符的序列。
但是,很多人不知道的是POSIX也将POSIX 3.195 Incomplete Line定义为:
文件末尾的一个或多个非
字符序列。
因此,没有结尾LF
的文件完全符合POSIX。
如果您选择不同时支持两种EOF类型,则您的程序不符合POSIX。
作为一个例子,让我们看一下以下文件。
1 This is the first line.
2 This is the second line.
无论EOF,我相信您都同意有两行。您通过查看已开始的行数而不是已终止的行数来弄清楚。换句话说,按照POSIX,这两个文件的行数相同:
1 This is the first line.\n
2 This is the second line.\n
1 This is the first line.\n
2 This is the second line.
手册页中关于wc
的换行数比较清楚,换行符只是一个0x0a
字符:
NAME
wc - print newline, word, and byte counts for each file
因此,wc
甚至没有尝试计算您可能称为“行”的数量。根据输入文件的EOF,使用wc
对行进行计数很可能导致错误计数。
您可以使用grep
来计数行,就像上面的示例一样。此解决方案既更健壮又更精确,并且支持文件中的行可能具有的所有不同风味:
$ grep -c ^ FILE
答案 11 :(得分:5)
以上是首选方法但是&#34; cat&#34;命令也有帮助:
cat -n <filename>
将显示包含行号的文件的全部内容。
答案 12 :(得分:5)
我在寻找计算多个文件行的方法时看到了这个问题, 因此,如果你想计算.txt文件的多个文件行,你可以这样做,
cat *.txt | wc -l
它也将在一个.txt文件上运行;)
答案 13 :(得分:4)
wc -l file.txt | cut -f3 -d" "
仅返回行数
答案 14 :(得分:4)
cat file.log | wc -l | grep -oE '\d+'
grep -oE '\d+'
:为了返回数字仅。答案 15 :(得分:3)
将文件输出重定向/管道传输到wc -l
就足够了,如下所示:
cat /etc/fstab | wc -l
然后将提供否。仅限行。
答案 16 :(得分:2)
我知道这是旧但仍然是: 计算过滤后的行
我的文件如下:
Number of files sent
Company 1 file: foo.pdf OK
Company 1 file: foo.csv OK
Company 1 file: foo.msg OK
Company 2 file: foo.pdf OK
Company 2 file: foo.csv OK
Company 2 file: foo.msg Error
Company 3 file: foo.pdf OK
Company 3 file: foo.csv OK
Company 3 file: foo.msg Error
Company 4 file: foo.pdf OK
Company 4 file: foo.csv OK
Company 4 file: foo.msg Error
如果我想知道发送了多少文件OK:
grep "OK" <filename> | wc -l
OR
grep -c "OK" filename
答案 17 :(得分:2)
或使用文件名模式对子目录中的所有行进行计数(例如,文件名中带有时间戳的日志文件):
wc -l ./**/*_SuccessLog.csv
答案 18 :(得分:1)
我刚刚制作了一个程序(node
)
npm install gimme-lines
gimme-lines verbose --exclude=node_modules,public,vendor --exclude_extensions=html
答案 19 :(得分:1)
计算行数并将结果存储在变量中,请使用以下命令:
count=$(wc -l < file.txt)
echo "Number of lines: $count"
答案 20 :(得分:1)
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
答案 21 :(得分:1)
此嵌入式便携式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:]]}
}
除了POSIX-compliant shells和bash之外,这还应该与所有zsh完全兼容。
答案 22 :(得分:0)
正如其他人所说,wc -l
是最佳解决方案,但为了将来参考,您可以使用Perl:
perl -lne 'END { print $. }'
$.
包含行号,END
块将在脚本末尾执行。
答案 23 :(得分:0)
wc -l文件名
例如:wc -l file.txt
它将为您提供该文件中的总行数
要获取最后一行,请使用 tail -1 file_name
答案 24 :(得分:0)
我试过 wc -l 从文件名中获取行数
要进行更多过滤,例如要计算文件中注释行的数量,请使用 grep '#' Filename.txt | wc -l
echo "No of files in the file $FILENAME"
wc -l < $FILENAME
echo total number of commented lines
echo $FILENAME
grep '#' $FILENAME | wc -l
答案 25 :(得分:0)
Awk 可以挽救生命(还有线路):
awk '{c++};END{print c}' < file
如果您想确保不计算空行,您可以这样做:
awk '/^./' '{c++};END{print c}' < file
答案 26 :(得分:0)
如果您使用的是某种基于 BSD 的系统,例如 macOS,我建议您使用 gnu 版本的 wc。它不会像 BSD wc 那样在某些二进制文件上绊倒。至少它仍然有些可用的性能。另一方面,BSD 的尾部很慢………………zzzzzzzzzz…………
至于 AWK,虽然只是一个小小的警告 - 因为它在默认的行假设下运行,意思是 \n
,如果你的文件碰巧没有尾随的换行符,AWK 会多计它1 与 BSD 或 GNU wc 相比。此外,如果您输入的内容根本没有新行,例如 echo -n
,取决于您是在 END { }
部分还是在 FNR==1
处进行测量,NR 将为不一样。