2016-07-28 101 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非常陌生,請求幫助!

+0

這不是一個unix的具體問題,雖然它可以用shell工具來完成,但它可能不是最合適的解決方案。 – theorifice

回答

0

您可以使用cutsed的組合完成您所需的操作。假設你輸入一個名爲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; 

有關的.csv輸出文件,只需將替換字符更改爲,代替\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上述解決方案,但剝離這些將是微不足道的。

相關問題