使用awk打印每行首尾字段时仅最后一行正常,该如何修复?
问题原因
你的输入文件是Windows格式的文本文件,行尾分隔符为\r\n(回车+换行)。gawk默认以\n作为行分割符,因此除了没有末尾换行的最后一行外,其余所有行的末尾都会残留一个不可见的\r(回车符)。
此时前两行的$NF实际为不可见的\r,打印时\r会将光标移动到当前行首,导致你看不到$NF的输出,看起来就像只有首字段被打印。
修复方案
可选任意一种方法解决:
- 方法1:在awk脚本中先移除行尾的
\r再处理字段
执行命令:gawk '{ sub(/\r$/, ""); print $1 " " $NF }' file_lists.t01 - 方法2:提前将文件转换为Unix格式(行尾仅
\n)
可以用dos2unix工具执行转换:
转换完成后即可正常运行你原来的awk命令。dos2unix file_lists.t01 - 方法3:直接指定gawk的行分隔符为
\r\n
执行命令:gawk -v RS='\r\n' '{ print $1 " " $NF }' file_lists.t01
内容的提问来源于stack exchange,提问作者Fortranner
相关产品推荐
相关产品推荐

