2016-07-28 7 views
0

私は何百行ものcsvファイルを持っています。これは次のようになります。テキストの行を区切り文字 ';'に基づいて複数の列に分割する方法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  ; 

を今、最初のパイプ|を削除すると、レコードが削除さ;前に存在空のスペースと一緒に区切り文字として;で複数の列に分割されなければならない前に、私は不正な文字を必要とします。私は必要なものを達成した後、次のように 上記のレコードがなります

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; 

は、どのように私はUnixの中でこれを実現し、また、CSVファイルにフォーマットデータをエクスポートできますか?

私は非常にUnixを使いこなしており、この1台で助けが必要です!

+0

これはシェルツールで実現できますが、これはUNIX固有の問題ではなく、最適な解決策ではない可能性があります。 – theorifice

答えて

0

cutsedの組み合わせを使用して、必要なものを達成できます。あなたの入力を仮定すると.CSV出力の場合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; 

と呼ばれるファイルで、単にあなたが,の末尾または末尾\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, 

\tのノートに置換文字を変更上記の解決策は、それらを取り除くことは自明です。

関連する問題