awk:输出文件在filename中包含^ M字符

时间:2014-10-07 09:03:29

标签: regex bash awk

我有一个很长的文件,看起来像这样:

0a
190  0.121212
191  0.232323
...
0b
190  0.1212
191  0.4545
...
16c
190  0.34654
191  0.567565
...

我使用awk使用此命令将文件拆分为许多较小的文件:

awk '/[0-9][a-c]/{close(x); x=$0;}{print > x;}' spectrum.tsv

这样可行,但输出文件的名称似乎都包含文件名末尾的换行符: enter image description here

我试图用" sub"删除换行符。像这样:

awk '/[0-9][a-c]/{close(x); x=$0;}{sub(/^M/,"",x)}{print > x;}' spectrum.tsv 

但这导致了同样的结果。

所以我的问题是,如何避免输出文件名中的换行符? 我正在研究OSX 10.10顺便说一句。输入文件来自Windows机器。

3 个答案:

答案 0 :(得分:3)

在让awk处理它们之前,先对文件运行dos2unix! 它将删除DOS样式的行尾,这可能是导致你头痛的原因。

答案 1 :(得分:1)

你可以在awk中设置一个合适的记录分隔符来处理输入文件中的\r

awk -v RS='\r?\n' '/[0-9][a-c]/{close(x); x=$0;}{print > x;}' spectrum.tsv

此处RS='\r?\n'RS设为可选\r^M),然后是\n

答案 2 :(得分:0)

在vi编辑器中打开并进入命令模式,然后: 输入":%s/[CTRL+V][CTRL+M]//g"