2016-07-28 6 views
0

Ich habe eine CSV-Datei mit Hunderten von Zeilen. Es sieht aus wie folgt:So teilen Sie eine Textzeile basierend auf dem Begrenzer ';' in mehrere Spalten in Unix?

Ž|12340525;AXN003 ;57DJ348;Z;2213-06;888;Bughekh_SEGikh  ;1234  ;S87_3 ;ABCD_1234  ; 
Ž|67890323;TYN003 ;H46DOE8;Z;2342-05;888;uRVGFVi_THFHIH  ;3421  ;D45_1 ;ERTT_8432  ; 

Nun, ich die ungültigen Zeichen muß, bevor das erste Rohr | entfernt werden und der Datensatz sollte vorhanden, bevor ; entfernt mit den leeren Räumen entlang in mehrere Spalten mit ; als Trennzeichen unterteilt werden . Die oben genannten Aufzeichnungen aussehen würde wie folgt nach dem zu erreichen, was ich brauche:

Col1  Col2  Col3  Col4 Col5  Col6 Col7    Col8  Col9 Col10 
12340525; AXN003; 57DJ348; Z; 2213-06; 888; Bughekh_SEGikh; 1234; S87_3; ABCD_1234; 
67890323; TYN003; H46DOE8; Z; 2342-05; 888; uRVGFVi_THFHIH; 3421; D45_1; ERTT_8432; 

Wie erreiche ich dies in Unix und auch die formatierten Daten in eine CSV-Datei exportieren?

Ich bin sehr neu zu Unix und bitte Hilfe bei diesem, bitte!

+0

Dies ist keine Unix-spezifische Frage, obwohl es mit Shell-Tools durchgeführt werden könnte, könnte es nicht die am besten geeignete Lösung sein. – theorifice

Antwort

0

Mit einer Kombination aus und sed können Sie erreichen, was Sie benötigen. Angenommen, Ihre Eingabe eine Datei input.txt

cat input.txt | cut -d'|' -f2- | sed 's/\s*;/;\t/g' 

12340525; AXN003; 57DJ348; Z; 2213-06; 888; Bughekh_SEGikh; 1234; S87_3; ABCD_1234; 
67890323; TYN003; H46DOE8; Z; 2342-05; 888; uRVGFVi_THFHIH; 3421; D45_1; ERTT_8432; 

Für CSV-Ausgabe ändern, einfach die Ersatzzeichen zu , statt \t

cat input.txt | cut -d'|' -f2- | sed 's/\s*;/,/g' 

12340525,AXN003,57DJ348,Z,2213-06,888,Bughekh_SEGikh,1234,S87_3,ABCD_1234, 
67890323,TYN003,H46DOE8,Z,2342-05,888,uRVGFVi_THFHIH,3421,D45_1,ERTT_8432, 

Hinweis genannt ist, dass Sie entweder ein Hinter , oder nachgestellten \t in die obigen Lösungen, aber diese auszuwischen, wären trivial.