• 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二进制可以看到不同, 显示为.,文件结尾没有

  • 相关阅读:
    个人学习代码保存:例8.在存储过程中使用简单的事务处理
    个人学习代码保存:例6.多文件上传
    泛型 .net学习日记
    .net 点击刷新验证码问题
    个人学习代码保存:例11.读取Excel文件中的数据
    个人学习代码保存:例12.读取GridView文件中的数据到Excel文件
    个人学习代码保存:例5.利用标准FileUpload单文件上传
    Android视频采集
    Android视频采集+H264编码
    实时传输协议(RTP)和实时控制协议(RTCP)
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205394.html
Copyright © 2020-2023  润新知