• linux的wc -l 命令统计文件少一行(一般是windows文件)


    先简单介绍

    wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出

    格式:wc file

    命令参数:

    -c 统计Bytes(字节数),并显示文件名

    -l 统计行数:使用换行符‘ ’作为行结束标志,实际是统计换行符个数

    -m 统计字符数。这个标志不能与 -c标志一起使用。

    -w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。

    -L 打印最长行的长度。

    -help 显示帮助信息

    --version 显示版本信息

     

    实例:

    wc test.txt

    6  24 132test.txt

    默认输出:行,字数,字节数

     

    test.txt内容

    Cat test.txt

    test1 name1 age1 sex1

    test2 name2 age2 sex2

    test3 name3 age3 sex3

    test4 name4 age4 sex4

    test5 name5 age5 sex5

    test6 name6 age6 sex6

     

    问题:wc 统计行数时少一行:

    因为wc –l是按 作为行结束符统计行数,所以最后一行如果没有 的话会统计丢失。

    实例:比如,在windows下生成同上面test.txt相同的文件testtt.txt,上传到linux下:

    cat testtt.txt

    test1 name1 age1 sex1

    test2 name2 age2 sex2

    test3 name3 age3 sex3

    test4 name4 age4 sex4

    test5 name5 age5 sex5

    test6 name6 age6 sex6[wizad@srv26 lmj]$

    可以看出结尾有点奇怪。这是因为文件末尾无 ,而是直接用了文件结束符EOF。这样文件使用wc统计就会少一行:

    wc -l testtt.txt

    5 24 136 testtt.txt

    使用管道也不行:

    cat testtt.txt | wc -l

    5

    为什么linux下没有这样的问题?

             因为vim编辑器会自动在文件结尾加上 ,在加上文件结束符EOF。(linux下文本文件主要按处理,所以vim会末行自动加 )

    而对windows文件用dos2unix转化也不行:

    [wizad@srv26 lmj]$ dos2unix testtt.txt

    dos2unix: converting file testtt.txt toUNIX format ...

    [wizad@srv26 lmj]$ wc testtt.txt

    5  24131 testtt.txt

    可以看出windows文件在linux下还是有兼容问题的。文件字数没变24,byte数少5个是windows下行结束符是回车 +换行 。而linux下只是换行

    Vim二进制可以看到不同, 显示为.,文件结尾没有

  • 相关阅读:
    Spring异常重试框架Spring Retry
    Ubuntu 16.04无法在WPS中输入中文的问题解决
    Ubuntu 16.04使用百度云的方案
    Ubuntu 16.04安装Wine版的迅雷+QQ(完美方案,终极解决方法)
    Ubuntu下Deb软件包相关安装与卸载
    Spring在Java Filter注入Bean为Null的问题解决
    MyBatis 3在Insert之后返回主键
    MySQL JDBC URL参数(转)
    MySQL索引原理及慢查询优化
    Markdown 语法整理大集合2017
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205394.html
Copyright © 2020-2023  润新知