1

我有一些数据文件要导入到带有一些“唯一”分隔符的数据库中:

字段分隔符 (FS):SOH(ASCII 字符 1)

记录分隔符(RS):STX(ASCII 字符 2)+'\n'</p>

我想使用 COPY 命令将文件导入 Postgres,但是虽然我可以指定自定义字段分隔符,但它无法处理记录分隔符。

我也不能只从数据中删除 \002,因为如果其中一个字段(并且有)中有换行符,它会错误地将 COPY 认为它是一条新记录,而实际上它不是.

需要注意的一件重要事情:保留字段中的换行符并不重要,只要将它们转换为空格就可以了。

考虑到这一点,我正在考虑使用“sed”之类的东西将换行符转换为空格,然后将 \002 转换为换行符。但是,由于 sed 是一个基于行的工具,它似乎没有在每行的末尾看到换行符,也无法对它们进行搜索/替换。

是否有任何其他 unix 命令行工具可以完成这项工作?

编辑:我想我真正需要的是一个 unix 实用程序,它可以将文件(执行搜索/替换)处理为“二进制”而不将其拆分为行

4

2 回答 2

3

根据Patrick给出的建议,我已经能够使用 Perl 做到这一点:

猫文件 | perl -pe 's/\002\n/\002\002/g' | perl -pe 's/\n/ /g' | perl -pe 's/\002\002/\n/g'

于 2008-12-19T04:04:54.887 回答
1

你可以多次通过文件吗?Pass 1 将所有 \002\n 转换为 \002\002 说。Pass 2 可以将所有的 \n 转换为空格。Pass 3可以将所有\002\002转换为\n。

于 2008-12-19T01:16:44.600 回答