awk print 在行末添加了一个 control-m 字符

15

我正在bash脚本中使用awk,并执行以下操作:

awk -F, -v result_file=$2'{
print $2 $1 > result_file
}' $data_file

在输出文件中,每行末尾都会有一个控制符'^M'字符。这是什么问题?


3
你的输入文件可能包含^M。如果是这样,请从中删除它。 - Guru
1
你是在电脑上创建的数据文件吗?它的行结尾符是^M^J,而Unix只使用^J。 - Barmar
5
将记录分隔符设置为CR-LF,即awk -v RS='\r\n' ... - Thor
1
太好了,设置记录分隔符非常成功...谢谢。 - puneet agrawal
1个回答

18

记录分隔符会自动设置为当前系统的行尾符。在基于Unix的系统上是LF(\n),在MS系统上是CR-LF(\r\n),在Mac OS X之前的Mac OS上是CR(\r)。因此,要处理在MS系统上记录的文件,请适当设置记录分隔符,例如:

awk -v RS='\r\n' ...

1
Mac OS X是一个类Unix系统,使用\n作为换行符。而Mac OS 9则不是基于Unix的系统,使用\r作为换行符。 - Jonathan Leffler
@JonathanLeffler:你说得对,感谢您的纠正。 - Thor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接