2016-05-06 11 views
0

[Ich habe die CSV-Datei in Linux-System mit Binärmodus verschoben. Datei Inhalt eines Feldes wird in mehrere Zeilen gespuckt seine Kommentar-Abschnitte, ich muss die neue Zeile entfernen, das gleiche Format beibehalten, bitte helfen Shell-Befehl oder Perl-BefehlZeilenumbruch Problem zu CSV-Datei in Linux verschieben

Hier ist das Beispiel für drei Datensätze, tatsächliche aussehen wie ] Original content of the file

nach [in linux bewegt, Kommentarfeld in 4 Zeilen aufgeteilt ist, ich will das Kommentarfeld im gleichen Format halten, aber das neue Linie Zeichen

„Erste Zeile

nicht will, Zweite Zeile

Dritte Linie alle Linien-Format sollte „nicht ändern ] 2

+0

Was ist mit den Zeilennummern? Gibt es auch eine Leerzeile nach jedem Datensatz ? – sjsam

+0

Möchten Sie * alle * neue Zeilen in der zweiten Spalte entfernen? –

+0

Hi sjsam, eigentlich Zeilennummer ist nicht erforderlich, behalten Sie die Leerzeile so wie sie ist. gehen, um dieses Feld in Orakel-Tabelle mit SQL Loader laden, zwei Felder und drei Datensätze betrachten ist vorhanden – Chidam

Antwort

1

Wie ich oben in meinem Kommentar sagte, sind die Angaben nicht klar, aber ich vermute, das ist, was Sie zu tun versuchen. Hier ist eine Möglichkeit zum Laden von Daten in Oracle unter Verwendung von sqlldr, wobei ein Feld von doppelten Anführungszeichen umgeben ist und Zeilenumbrüche enthält, wobei das Ende des Datensatzes eine Kombination aus Wagenrücklauf und Zeilenvorschub ist. Dies kann passieren, wenn die Daten aus einem Excel-Arbeitsblatt stammen, das beispielsweise als CSV-Datei gespeichert ist, in der die Zelle die Zeilenumbrüche enthält.

Hier ist die Datendatei, die von Excel als .csv exportiert und in gvim angezeigt wird, wobei die Option aktiviert ist, um Steuerzeichen anzuzeigen. Sie können die Zeilenumbrüche als '$' Charakter und die Zeilenumbrüche als '^M' Zeichen sehen:

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

die Steuerdatei wie dieses Konstrukt die "str" Klausel über die infile Option Zeile mit dem Ende der Aufzeichnung Zeichen zu setzen. Es erzählt sqlldr diesem hex 0D (Carriage Return oder^M) ist die Aufzeichnung Separator (auf diese Weise er die Zeilenvorschübe innerhalb der doppelten Anführungszeichen ignoriert):

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 
) 

Nach dem Laden sieht die Daten wie folgt mit Zeilenvorschübe im Kommentarfeld (ich nannte es colc):

SQL> select * 
    2 from test; 

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

200     test2    2line1 
              2line2 
              2line3 

SQL> 
+0

Hallo Gary, Es funktioniert erstaunlich, Das ist, was ich erwartet Vielen Dank :) – Chidam

+0

Großartig, froh, dass es geholfen hat. –

Verwandte Themen