在 Linux 中移动 csv 文件的换行问题

Line breaking issue to move csv file in Linux

[我已将 csv 文件移动到 Linux 二进制模式的系统中。一个字段的文件内容被吐成多行它的评论部分,我需要删除新行,保持相同的格式,请帮助 shell 命令或 perl 命令

这里是三个记录的例子,实际看起来像] Original content of the file

[移到linux后,评论区被分成4行,我想保持评论区的格式不变,但不想换行符

"第一行

第二行

第三行 所有行格式不应更改” ]2

正如我在上面的评论中所说,规格尚不清楚,但我怀疑这就是您想要做的。这是一种使用 sqlldr 将数据加载到 Oracle 的方法,其中一个字段被双引号括起来并包含换行符,其中记录的末尾是一个组合回车 return/linefeed。例如,当数据来自另存为 .csv 的 Excel 电子表格,其中单元格包含换行符时,就会发生这种情况。

这是由 Excel 以 .csv 格式导出并在 gvim 中查看的数据文件,打开了显示控制字符的选项。您可以将换行符视为 '$' 字符,将回车 returns 视为 '^M' 字符:

100,test1,"1line1$
1line2$
1line3"^M$
200,test2,"2line1$
2line2$
2line3"^M$

像这样构造控制文件,使用 infile 选项行上的 "str" 子句来设置记录结束字符。它告诉 sqlldr 十六进制 0D(回车 return,或 ^M)是记录分隔符(这样它会忽略双引号内的换行符):

LOAD DATA
infile "test.dat" "str x'0D'" 
TRUNCATE
INTO TABLE test
replace
fields terminated by ","  
optionally enclosed by '"'
(
cola char,
colb char,
colc char
)

加载后,数据看起来像这样,在评论字段(我称之为 colc)中保留了换行符:

SQL> select *
  2  from test;

COLA                 COLB                 COLC
-------------------- -------------------- --------------------
100                  test1                1line1
                                          1line2
                                          1line3

200                  test2                2line1
                                          2line2
                                          2line3

SQL>