问题 awk print在行尾添加了一个control-m字符


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

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

在输出文件中,我在每行的末尾得到一个控制-M'^ M'字符。哪里不对?


9560
2017-10-25 13:40


起源

您的输入文件可能包含^ M.如果是这样,请从那里删除它。 - Guru
您是否在PC上创建了数据文件?它的行结尾是^ M ^ J,而Unix只使用^ J。 - Barmar
将记录分隔符设置为CR-LF,即 awk -v RS='\r\n' ...。 - Thor
伟大...设置记录分隔符工作hansomely ...谢谢 - puneet agrawal


答案:


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

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

13
2017-10-26 06:50



Mac OS X是一个类Unix系统并使用 \n 行尾。 Mac OS 9不是基于Unix而是使用了 \r 行尾。 - Jonathan Leffler
@JonathanLeffler:你是对的,谢谢你的纠正。 - Thor