Ich habe mit dem Ziehen bestimmter Werte aus einer sehr hässlichen CSV-Datei beauftragt.grep-ing für den Wert einer CSV-Datei
Die CSV ist in folgendem Format:
command1=value1, command2=value2, etc etc.
Kein Problem bisher war ich für den Befehl grep-ing I benötigt und dann durch Schnitt kochend f 2 d ‚=‘ zurückzukehren nur die Wert.
Das Problem, das ich habe, ist eines der Felder ist Text und kann mehrere Werte haben, die auch durch Komma getrennt sind. Um eine weitere Kurve Ball hinzufügen, wenn (und nur dann) einen der Werte einen Raum darin hat, wird das Feld in doppelte Anführungszeichen eingeschlossen werden, damit der Wert, den ich bin auf der Suche zu ziehen sein könnte:
command=value,..
command=value1,value2,..
command="value 1",..
command="value 1, value 2",..
(wo. Andere Werte sind in der Protokolldatei ODER am Ende der Zeile)
Ich dachte, ich hätte es geknackt, indem ich einfach die Daten zwischen zwei Feldnamen mit grep -oP '(? < = command1 =) gezogen habe. = command2) 'und dann durch rev | cut -c 2- | rev.
Aber ich habe jetzt die Reihenfolge der Felder erscheinen nicht konsistent sind, so dass die Datei konnte herausgefunden:
command1=value1, command3=value3, command2=value2
Wie kann ich den Wert von command2 erhalten, wenn es nicht in eingeschlossen werden kann oder doppelte Anführungszeichen, es kann auch Kommas enthalten. Ich habe Mühe zu sehen, wie es möglich ist, wie der Grep wissen wird, was ein Wertbruch ist und was das nächste Feld ist.
Jede Hilfe wird dankbar angenommen.
Was Sie beschreiben, klingt trivial mit einem kleinen, einfachen awk Skript zu handhaben, aber Sie werden einige kurze, prüfbare Abtastwerteingang schreiben müssen und erwartete Ausgabe f oder wir können Ihnen helfen. –