我的文件(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个月的日常文件需要分析,因此不能手动删除。请帮忙!
答案 0 :(得分:1)
^M
表单称为“插入符号”,表示回车符。您的文件使用DOS行尾字符。将它们转换为Unix格式。
您可以通过在输入文件上运行dos2unix
或通过tr -d '\r'
进行管道来实现此目的。
在vi
和sed
中,您可以使用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