今天学习遇到一个新问题,描述如下:
我通过UE编辑器,FTP方式连上了后台Linux主机,然后右键->新建了一个文件“input.txt”,文件内容如下:
zero file,12,one disk,2,two kind,300,tree Dog,4
然后执行了如下命令:
cat ./input.txt | awk -F ',' '{print $1,$0}'
执行结果如下:
zero file file,12,one disk disk,2,two kind kind,300,tree Dog Dog,4
很奇怪,为什么第一行打印成了这个结果?
然后咨询导师,导师一眼就发现问题所在:
由于我是通过UE新建的文件,文件格式默认为dos格式,对于dos格式的文件,默认行尾是以“ ”结尾的。可以通过以下脚本查看下第一行的输出结果:
head -1 ./input.txt | awk -F ',' '{print $1,$0}' | od -c
(od命令:格式化输出文件中的数据,输出ASCII码字符或者是转义字符)
查询结果如下:
$head -1 ./input.txt | awk -F ',' '{print $1,$0}' | od -c + awk -F , '{print $1,$0}' + od -c + head -1 ./input.txt 0000000 z e r o z e r o 0000014
可以看出,$1取值是以 结尾,$0是以 结尾的。
代表回车,即回到行首的意思,输出$1之后,光标回到行首,然后后面的空格会把字母"z"替换掉,然后是后面的“zero”,然后又回到行首,最后 换行。
这样一来,为什么会出现第一行的结果也就非常清楚了!
总结:以后建立文件,尽量直接在主机上进行。。。