2017-09-08 6 views
0

Ich habe eine TXT-Datei und ich muss Komma mit Leerzeichen nur zwischen Anführungszeichen ersetzen.Komma zwischen zwei Zeichen ersetzen

Zum Beispiel:

This,is,example,"need,delete comma",xxxx 

Und sollte das Ergebnis sein:

This,is,example,"need delete comma",xxxx 

ich diesen Befehl haben, aber es ist falsch:

sed -i '/^"/,/^"/s/.,/ /' output.txt 
+1

ich bin neugierig, warum Sie die Kommas ersetzen? Versuchen Sie, einen korrekten CSV-Parser zu umgehen? –

Antwort

2

Try this:

awk ‚NR 2-1% {gsub (/, /, " ")} 1' RS = \" ORS = \" input.txt> output.txt

Input:

Diese

ist, beispielsweise "Notwendigkeit, löschen Komma", xxxx

Ausgang:

Dies ist, beispielsweise "Komma müssen löschen", xxxx

+1

Dies wird am Ende der mehrzeiligen Ausgabe ein abschließendes '" 'hinzufügen. Sie können das' testfile' aus der Antwort https://stackoverflow.com/questions/46118785/replace-comma-between-two-characters/46119331 testen # 46119331 – RomanPerekhrest

0

Complex awk Lösung:

Probe testfile:

This,is,example,"need,delete comma",xxxx 
asda 
asd.dasd,asd"sdf,dd","sdf,sdfsdf" 
"some,text,here" another text there"" 

Der Job:

awk -F'"' '$0~/"/ && NF>1{ for(i=1;i<=NF;i++) { if(!(i%2)) gsub(/,/," ",$i) }}1' OFS='"' testfile 

Der Ausgang:

This,is,example,"need delete comma",xxxx 
asda 
asd.dasd,asd"sdf dd","sdf sdfsdf" 
"some text here" another text there"" 
0

Wie wäre es mit der folgenden awk, wo ich suche nur nach Übereinstimmung zwischen "..." und dann einfach alle Kommas in diesem Spiel zu entfernen. Dann ersetzen Sie die neuen Werte durch alte ".." Werte.

awk '{match($0,/\".*\"/);val=substr($0,RSTART,RLENGTH);gsub(/,/," ",val);gsub(/\".*\"/,val,$0)} 1' Input_file 

EDIT1: Nach RomanPerekhrest der input_file eine kleine Änderung in obigem Code zu sehen, die werden verbieten ändern "" in jeder Zeile.

awk '{match($0,/\".*\"/);val=substr($0,RSTART,RLENGTH);gsub(/[^","],/," ",val);gsub(/\".*\"/,val,$0)} 1' Input_file 
0

echo 'Dies ist, beispielsweise "Notwendigkeit, löschen Komma", xxxx' | awk -F \“‚{sub (/, /,““, $ 2); print}‘OFS = \ „

Dies ist, beispielsweise“ müssen löschen Komma“, xxxx

Verwandte Themen