Entfernen einer Array-Spalte mit unterschiedlicher Länge

Entfernen einer Array-Spalte mit unterschiedlicher Länge

Ich möchte ein Array entfernen, das keine feste Größe hat. Zum Beispiel

file.csv

001,"Geography",TRUE,"{1,0,1,1}",1,"CHARLIE"
002,"History",FALSE,"{0,0,1,1}",0,"DAVID"
003,"Mathematics",TRUE,"{1,1,1,1}",1,"SAM"

Das folgende Array sollte in das folgende Format konvertiert werden

file_edited.csv

001,"Geography",TRUE,1,"CHARLIE"
002,"History",FALSE,0,"DAVID"
003,"Mathematics",TRUE,1,"SAM"

So geht das in der Befehlszeile.

Antwort1

Ich bin sicher, dass es unzählige verschiedene Möglichkeiten gibt, dies zu erreichen. Ich bevorzuge sed:

sed 's/"{.*}",//'

AnGNU/Linux(GNU sed), Verwendung:

sed 's/"{.*}",//' csv
001,"Geography",TRUE,1,"CHARLIE"
002,"History",FALSE,0,"DAVID"
003,"Mathematics",TRUE,1,"SAM"

OS X(BSD sed, beachten Sie das -EFlag):

sed -E 's/"{.*}",//' csv 
001,"Geography",TRUE,1,"CHARLIE"
002,"History",FALSE,0,"DAVID"
003,"Mathematics",TRUE,1,"SAM"

Antwort2

Verwenden Sie Python und sein CSV-Modul, beispielsweise den folgenden einzelnen Befehl:

python -c 'import sys,csv
w = csv.writer(sys.stdout, quoting=csv.QUOTE_NONNUMERIC)
for row in csv.reader(sys.stdin):
    del row[3]
    w.writerow(row)' < file.csv > file_edited.csv

Die Magie geschieht in der vorletzten Zeile des Befehls. In Python beginnen Arrays bei Index 0, ebenso wie row[3]die vierte Spalte. Daher wird hier einfach die vierte Spalte aus jedem Datensatz entfernt.

Alternativ können Sie einfach die Spalten 0, 1, 2, 4 und 5 ausdrucken, indem Sie

python -c 'import sys,csv
w = csv.writer(sys.stdout, quoting=csv.QUOTE_NONNUMERIC)
for row in csv.reader(sys.stdin):
    w.writerow([row[0], row[1], row[2], row[4], row[5]])' < file.csv > file_edited.csv

verwandte Informationen