2016-07-28 5 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, хотя это может быть выполнено с помощью инструментов оболочки, это может быть не самое подходящее решение. – theorifice

ответ

0

Вы можете выполнить все, что вам нужно, с помощью комбинации cut и sed. Предположим, что ваш вход файл с именем 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 в вышеупомянутые решения, но исключение их было бы тривиальным.

Смежные вопросы