2013-01-31 24 views
1

上午在Windows Vista上工作用的GnuWin32(SED 4.2.1和核心工具5.3.0)。还有ActivePerl 5.14.2包。使用SED改变<CR><LF>一个符号

我有一个大的多记录文件。文件中每个记录的结尾用四个美元符号($$$$)表示。在每个逻辑记录中有很多“CRLF”。

我想与为|+|这样的符号来代替CRLF的所有实例。然后,我将用CRLF替换$$$$。结果:每行一条记录导入到Excel中以供进一步操作。

我试过几种方法转化CRLF|+|但没有成功。

例如,一种方法是:sed -e "s/[\r\n]/|+|/g" source_file_in target_file_out

另一种方法中使用tr -d删除\r,然后第二个语句:sed -e "s/\n/|+|/g" source_file_in target_file_out

tr语句工作; sed声明没有。

我读过以下文章,但看不到如何改编它们以用|+|之类的符号替代\r\n

sed: how to replace CR and/or LF with "\r" "\n", so any file will be in one line

Replace string that contains CRLF?

How can I replace a newline (\n) using sed?

如果这个问题不能轻易使用sed(和tr)来解决,然后我会,如果有人给我看如何使用Perl。


谢谢你的建议。

awk脚本还没有完全工作,所以我会添加一些缺少的细节,希望您能够微调您的建议。

首先,我正在运行gawk v3.1.6.2962。我相信awk的实现可能有所不同,所以这可能是一个有用的信息。

接下来,介绍一些关于数据类型和数据来源的更多信息。

数据是关于化学物质(输入到立体化学绘图程序的文本数据)。

化学文件格式为.sdf格式。

当我用记事本打开“133711.sdf” ++(使用查看/显示符号/显示所有字符),我看到在屏幕截图所示的数据: https://dl.dropbox.com/u/3094317/_master_1_screen_shot_.png

正如你看到的,只有LF - 没有CR。 我相信这意味着.sdf文件的来源是一个UNIX系统。

接下来,我运行Windows命令COPY * .sdf _master_2_.txt。这创建了我想要解析为记录的非常大的文件文件。

_master_2_.txt具有与133711.sdf-LF相同的结构;没有CR。

然后,我在.BAT文件中运行awk推荐。我需要用双引号替换你的单引号,因为微软创造了我。

awk -v FS =“\ r \ n”-v OFS =“| + |” -v RS =“\ $ \ $ \ $ \ $”-v ORS =“\ r \ n”“{$ 1 = $ 1} 1”C:_master_2_.txt> C:\ output.txt

I'已附加了output.txt的屏幕提示: https://dl.dropbox.com/u/3094317/output.txt.png

正如您所看到的,awk命令未将“\ r \ n”替换为“| + |”。

此外,Windows使用CRLF创建output.txt。

它成功地用CRLF取代了四个$。

此信息是否足以更新您的awk建议以处理与Windows相关的问题?

+2

我会建议先使用sed/awk格式化您的问题文本... – Kent

+0

您的问题被忽略,因为它的格式非常糟糕。请阅读[常见问题](http://stackoverflow.com/faq) –

+0

sed是简单替换一条线的优秀工具。对于其他任何事情,请使用awk。 –

回答

0

与GNU AWK试试这个:

awk -v FS='\r\n' -v OFS='|+|' -v RS='\\$\\$\\$\\$' -v ORS='\r\n' '{$1=$1}1' file 

我看到你更新的问题,你是在Windows上。为了避免可笑引用规则和问题,把这个名为“whatever.awk”文件:

BEGIN{FS="\r\n"; OFS="|+|"; RS="\\$\\$\\$\\$"; ORS="\r\n"} {$1=$1}1 

,并运行它

awk -f whatever.awk file 

,看看有没有你想要做什么。

+0

谢谢你的建议。 awk脚本还没有完全工作,所以我会添加一些缺失的细节,希望能够对您的建议进行微调。 我已经在这里解释了输入和输出 - I/O比我的原始问题的注释部分允许的时间长。 https://dl.dropbox.com/u/3094317/_follow_up_post_.mht – user2028514

+0

请勿将您的示例输入和期望的输出放在其他某个网站上,也不要放在原始文章的评论部分。只需编辑您的原始帖子,以提供缺失的信息。 –

+0

完成 - 参见上文。 – user2028514