如何在unix中查看和更改CSV文件中的换行符

时间:2014-11-12 21:01:22

标签: unix escaping netezza linefeed

我试图将一些数据加载到netezza中,但它不会让我,因为我的文件在每行的末尾都有换行符

我的问题是: 如果我查看notepad ++,我可以看到换行符,我如何在unix中进行等效操作?

如何更改换行符以在每个换行符的开头添加转义字符,以便加载到netezza中?

1 个答案:

答案 0 :(得分:0)

换行符是nzload行末尾的预期字符。我认为这是马车回报,你必须遇到问题。

对于您的第一个问题,您可以使用“vi -b”来阻止vi检测到该文件来自DOS并尝试隐藏导致您心痛的回车。如果你在文件名旁边的vi屏幕底部看到“[dos]”,那么你知道那里有你没有看到的回车符。

如果要在vi中打开大数据文件,可以使用“od -a filename”检查回车或其他控制字符的数据。

如果您想在数据中保留回车符,无论是否在行尾,您都可以使用正则表达式将其转义:

[nz@netezza ~]$ cat data.txt
ABC
DEF
[nz@netezza ~]$ od -a data.txt
0000000   A   B   C  cr  nl   D   E   F  cr  nl
0000012
[nz@netezza ~]$ perl -p -e 's/\r/\\\r/g' data.txt > data_escaped.txt
[nz@netezza ~]$ cat data_escaped.txt
ABC\
DEF\
[nz@netezza ~]$ od -a data_escaped.txt
0000000   A   B   C   \  cr  nl   D   E   F   \  cr  nl
0000014

然后您可以使用带有-escapechar选项的nzload来加载数据。但是,如果使用-escapechar选项,则必须考虑在数据中使用escapechar()的可能性。更全面的准备就是这样:

[nz@netezza ~]$ cat data.txt
A\BC\
DE\F
[nz@netezza ~]$ od -a data.txt
0000000   A   \   B   C   \  cr  nl   D   E   \   F  cr  nl
0000015
[nz@netezza ~]$ perl -p -e 's/\\/\\\\/g' data.txt | perl -p -e 's/\r/\\\r/g' > data_escaped.txt
[nz@netezza ~]$ cat data_escaped.txt
A\\BC\\\
DE\\F\
[nz@netezza ~]$ od -a data_escaped.txt
0000000   A   \   \   B   C   \   \   \  cr  nl   D   E   \   \   F   \
0000020  cr  nl
0000022

然后,您可以使用nzload并验证结果。

[nz@netezza ~]$ nzload -db testdb -t crtest -df data_escaped.txt -escapechar \\ -ctrlchars -crinstring
Load session of table 'CRTEST' completed successfully
[nz@netezza ~]$ nzsql -d testdb -c "select * from crtest"
  COL1
--------
 A\BC\
 DE\F
(2 rows)

[nz@netezza ~]$ nzsql -t -d testdb -c "select * from crtest"  | od -a
0000000  sp   A   \   B   C   \  cr  nl  sp   D   E   \   F  cr  nl  nl
0000020

或者,如果它们实际上不是您想要的数据的一部分,那么您可以简单地根据dos2unix消除回车,并且只是创建文件的过程中不需要的工件,并且完成它。 / p>

[nz@netezza ~]$ cat data.txt
ABC
DEF
[nz@netezza ~]$ od -a data.txt
0000000   A   B   C  cr  nl   D   E   F  cr  nl
0000012
[nz@netezza ~]$ dos2unix data.txt
dos2unix: converting file data.txt to UNIX format ...
[nz@netezza ~]$ od -a data.txt
0000000   A   B   C  nl   D   E   F  nl
0000010