在没有出现^ M的情况下连接线对

时间:2014-08-15 17:48:49

标签: awk sed

我的文件(temp.txt)如下所示:

-2011-10-07 11:30:01
00 ///// ///// ///// 00000C00
-2011-10-07 11:30:17
00 ///// ///// ///// 00000C00
-2011-10-07 11:30:32
00 ///// ///// ///// 00000C00
-2011-10-07 11:30:46
00 ///// ///// ///// 00000C00

我想连接每对线,所以它看起来像这样:

-2011-10-07 11:30:01 00 ///// ///// ///// 00000C00
-2011-10-07 11:30:17 00 ///// ///// ///// 00000C00
-2011-10-07 11:30:32 00 ///// ///// ///// 00000C00
-2011-10-07 11:30:46 00 ///// ///// ///// 00000C00

然而,我尝试过的每种方法(sed,awk,paste)都会在对之间插入^ M,如下所示:

-2011-10-07 11:30:01^M 00 ///// ///// ///// 00000C00
-2011-10-07 11:30:17^M 00 ///// ///// ///// 00000C00
-2011-10-07 11:30:32^M 00 ///// ///// ///// 00000C00
-2011-10-07 11:30:46^M 00 ///// ///// ///// 00000C00

在vi中,^ M显示为蓝色,可以手动删除,但不能通过模式匹配删除。它提出了"未找到的模式"错误。 sed and awk还没有工作过。在gedit中打开或导出到电子表格时,回车符表示它显示在第一个文件中。由于我的文件比这里的段大得多,并且我有6个月的日常文件需要分析,因此不能手动删除。请帮忙!

3 个答案:

答案 0 :(得分:1)

^M表单称为“插入符号”,表示回车符。您的文件使用DOS行尾字符。将它们转换为Unix格式。

您可以通过在输入文件上运行dos2unix或通过tr -d '\r'进行管道来实现此目的。

vised中,您可以使用s/\r//g自动替换它们。

答案 1 :(得分:0)

使用sed。这适用于UNIX和DOS格式输入,因此无需在文件中使用dos2unix

sed 'N; s|[\r\n]\+| |' file

输出:

-2011-10-07 11:30:01 00 ///// ///// ///// 00000C00
-2011-10-07 11:30:17 00 ///// ///// ///// 00000C00
-2011-10-07 11:30:32 00 ///// ///// ///// 00000C00
-2011-10-07 11:30:46 00 ///// ///// ///// 00000C00

答案 2 :(得分:0)

正如其他人所指出的,问题不在于您用来处理输入文件的工具,它是生成输入文件的工具。

tr -d '\r' < file | awk '{ORS=(NR%2?FS:RS)}1'

或使用GNU awk进行多字符RS:

awk -v RS='\r\n' '{ORS=(NR%2?FS:"\n")}1' file