
Ich habe eine CSV-Datei mit etwa 25 Spalten. Einige Zeilen der Datei enthalten 26 Spalten, daher möchte ich nach den Zeilen suchen, die diese zusätzliche Spalte enthalten, und sie entfernen, um awk mit der gesamten Datei verwenden zu können.
Die Felder sind getrennt durch; SemikolonDie zusätzliche Spalte hat das FormatVARNAME="Text ist hier"und der Wert „Text ist hier“ ist beliebiger Text.
Ich habe es geschafft, dieVARNAMEaus allen Zeilen, aber ich kann kein Muster entdecken, das mit dem beliebigen Wert (dem zitierten Text) übereinstimmt.
Mein Ziel ist, Zeilen mit dieser zusätzlichen Spalte zu finden (VARNAME="Text ist hier") und entfernen Sie es.
Beispiel:
Aktuelle Datei:
ROW1: VAR1:"Value 1";VAR2="Value 2";VAR3="Value 3"
ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="Different Values";VAR3="Value 6"
Die Zieldatei sollte sein:
ROW1: VAR1:"Value 1";VAR2="Value 2";VAR3="Value 3"
ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
Antwort1
Sie können etwas wie Folgendes verwenden:
sed 's/;VAREXT.[^;]*//' file #combine with -i for in-place editing
Testen:
a=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="Different Values";VAR3="Value 6"'
b=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="1234567";VAR3="Value 6"'
c=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="VAREXT";VAR3="Value 6"'
echo "$a" |sed 's/;VAREXT.[^;]*//'
echo "$b" |sed 's/;VAREXT.[^;]*//'
echo "$c" |sed 's/;VAREXT.[^;]*//'
"ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
"ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
"ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
Antwort2
Vorausgesetzt, Ihre CSV-Datei hat keine Kopfzeile, es gibt keine Leerzeichen nach dem Semikolon und nur eines VAREXT...
pro Zeile. Versuchen Sie in Bezug auf Ihr Beispiel Folgendes:
sed 's/;VAREXT=\"[A-Za-z0-9 ]*\"//' in.csv
Wo der Wert vonVAREXTkönnte eine Kombination aus Buchstaben, Ziffern und Leerzeichen sein.