标题:[实践OK]cat | wc -l 少一行的问题,linux的wc -l 命令统计文件少一行(一般是windows文件)。 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Tue, 27 Jun 2017 22:13:50 +0000 作者:jackxiang 地址:http://jackxiang.com/post/9289/ 内容: 背景:用Windows下的Excel,再倒腾成Txt,在Linux下统计发现少一行,最后,用vi对最后一行的行尾按回车后再加一行,后删除这一行,再统计就对了,具体原因如下。 今天从一个服务器列表来批量执行expect脚本进行Tivoli Endpoint Client的安装,从excel表格中拷贝出服务器名导入到txt文件上传到服务器后,执行wc -l统计发现少了一行,反复对比确认不存在遗失的条目,那么为什么wc -l少一行呢? 查询帮助文件: [root@managevm1 ~]# wc --help -l, --lines print the newline counts -l用来统计新行的个数,那么用什么来标记新行的开始呢?对了!用换行符\n。于是用 vi编辑器打开txt文件,在最后一行的行尾回车下,然后ESC推出到命令模式,dd删除自然生成的最后一个空行。保存退出再次运行wc -l统计,这样就和excel中的行数一样了。 ============================================================= 先简单介绍 wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出 格式:wc file 命令参数: -c 统计Bytes数(字节数),并显示文件名 -l 统计行数:使用换行符‘\n’作为行结束标志,实际是统计换行符个数 -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是按\n作为行结束符统计行数,所以最后一行如果没有\n的话会统计丢失。 实例:比如,在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]$ 可以看出结尾有点奇怪。这是因为文件末尾无\n,而是直接用了文件结束符EOF。这样文件使用wc统计就会少一行: wc -l testtt.txt 5 24 136 testtt.txt 使用管道也不行: cat testtt.txt | wc -l 5 为什么linux下没有这样的问题? 因为vim编辑器会自动在文件结尾加上\n,在加上文件结束符EOF。(linux下文本文件主要按处理,所以vim会末行自动加\n) 而对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下行结束符是回车\r+换行\n。而linux下只是换行\n Vim二进制可以看到不同,\n显示为.,文件结尾没有 来自:http://blog.csdn.net/sws9999/article/details/7942074 Generated by Jackxiang's Bo-blog 2.1.1 Release