我正在使用 GnuWin32(sed 4.2.1 和核心实用程序 5.3.0)在 Windows Vista 上工作。也有 ActivePerl 5.14.2 包。
我有一个大的多记录文件。文件中每条记录的结尾用四个美元符号 ($$$$) 表示。每个逻辑记录内都有许多“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:如何将 CR 和/或 LF 替换为 "\r" "\n",因此任何文件都将在一行中
sed
如果使用(and )无法轻松解决此问题tr
,那么如果有人告诉我如何使用,我将使用 Perl。
谢谢埃德的推荐。
awk 脚本尚未完全运行,因此我将添加一些缺失的细节,希望您可以微调您的建议。
首先,我正在运行 gawk v3.1.6.2962。我相信 awk 实现可能存在差异,所以这可能是一个有用的信息。
接下来,有关数据类型和数据来源的更多信息。
数据是关于化学品的(输入立体化学绘图程序的文本数据)。
化学文件为 .sdf 格式。
当我在 NotePad++ 中打开“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
我附上了 output.txt 的屏幕喊话: https ://dl.dropbox.com/u/3094317/output.txt.png
如您所见,awk 命令没有成功将“\r\n”替换为“|+|”。
此外,Windows 使用 CRLF 创建了 output.txt。
它确实成功地将四个 $ 替换为 CRLF。
此信息是否足以更新您的 awk 建议以处理与 Windows 相关的问题?