Linux shell 学习笔记(三)

今天学习遇到一个新问题,描述如下:

我通过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”,然后又回到行首,最后 换行。

这样一来,为什么会出现第一行的结果也就非常清楚了!

总结:以后建立文件,尽量直接在主机上进行。。。

原文地址:https://www.cnblogs.com/lzp666/p/6531878.html