Bestimmte Spalte entfernen, falls in der CSV-Datei vorhanden

Bestimmte Spalte entfernen, falls in der CSV-Datei vorhanden

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.

verwandte Informationen