2017-04-04 1 views
2
Datei

Ich habe einen csv und ich würde gerne wissen, wie Newline zu ersetzen durch -, gerade in den Brüder Spalte mit bash:Reformierte Artikel mit Zeilenumbrüche aus einer CSV-

name,brothers,age,adress 
------------------------ 
john,"marc 
peter 
paul 
alex",18,street 
thomas,mike,20,place 
+0

Sie benötigen einen richtigen CSV-Parser, und Stack Overflow ist nicht der richtige Ort, um nach Empfehlungen für einen in 'bash' zu fragen. – chepner

Antwort

1

Awk perfekt ist dies für

awk -v RS='^$' -v ORS= '{while (match($0,/"[^"]+"/,a)) {gsub(/\n/," ",a[0]); print substr($0,1,RSTART-1) a[0]; $0=substr($0,RSTART+RLENGTH)} print}' your.csv 

Ausgänge:

me,brothers,age,adress 
------------------------ 
john,"marc peter paul alex",18,street 
thomas,mike,20,place 
+0

Perfekt, vielen Dank –

0

ungainly Combo von csvtool, sed, & bash:

csvtool pastecol 2 1- \ 
     input.csv 
     <(csvtool col 2 input.csv | \ 
      sed -n '/"/,/"/{:a;N;$!ba;s/\([^"]\)\n/\1-/g;};p') | \ 
csvtool trim r - 

Ausgang:

name,brothers,age,adress 
------------------------ 
john,marc-peter-paul-alex,18,street 
thomas,mike,20,place 

Mit Ausnahme des sed Teil, ist es nicht so schlimm ist. csvtool ersetzt Spalte mit einer bearbeiteten Kopie. Am Ende trimmt es ein extra Komma, dass csvtool darin stecken bleibt.

Verwandte Themen