Bash:不是空文件,但是wc -l输出0

时间:2017-02-28 16:03:40

标签: bash file

我有一个非空文件(即使是一个很大的文件,400Ko),我可以用更少的文件阅读。

但如果我尝试使用wc -l /path/to/file输出行数,则会输出0

怎么可能?

4 个答案:

答案 0 :(得分:4)

您可以自行验证该文件不包含换行符/换行符(ASCII 10),这会导致wc -l报告0行。

  1. 首先,计算文件中的字符:

    wc -c /path/to/file
    

    您应该获得非零值。

  2. 现在,过滤掉不是换行符的所有内容:

    tr -dc '\n' /path/to/file | wc -c
    

    你应该回来0。

  3. 或者,删除换行符并计算结果。

    tr -d '\n' | wc -c
    

    您应该返回与步骤1中相同的值。

答案 1 :(得分:3)

wc计算文件中'\ n'个字符的数量。可能是你的文件中没有一个吗?

这是GNU源: https://www.gnu.org/software/cflow/manual/html_node/Source-of-wc-command.html

寻找COUNT(c)宏。

答案 2 :(得分:2)

这是一种可能的方式。创建一个只有空值的400k文件:

dd if=/dev/zero bs=1024 count=400 of=/tmp/nulls ; ls -log /tmp/nulls 

输出显示文件存在:

400+0 records in
400+0 records out
409600 bytes (410 kB, 400 KiB) copied, 0.00343425 s, 119 MB/s
-rw-rw-r-- 1 409600 Feb 28 11:12 /tmp/nulls

现在计算一下:

wc -l /tmp/nulls
0 /tmp/nulls

答案 3 :(得分:2)

HTML文件可能是minified。在缩小内容期间,将删除换行符。

尝试使用file命令,

file filename.html

filename.html: HTML document text, UTF-8 Unicode text, with very long lines, with no line terminators