eliminar una columna de matriz con diferente longitud

eliminar una columna de matriz con diferente longitud

Quiero eliminar una matriz que no tiene un tamaño fijo. Por ejemplo

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"

La siguiente matriz debe convertirse al siguiente formato

file_edited.csv

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

Cómo hacer esto en la línea de comando.

Respuesta1

Estoy seguro de que hay muchas formas diferentes de lograr esto, yo prefiero sed:

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

EnGNU/Linux(GNU sed), utilice:

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

OSX(BSD sed, tenga en cuenta la -Ebandera):

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

Respuesta2

Utilice Python y su módulo CSV, por ejemplo el siguiente comando único:

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

La magia ocurre en la penúltima fila del comando. En Python, las matrices comienzan en el índice 0, al igual row[3]que la cuarta columna; entonces, este simplemente elimina la cuarta columna de cada registro.

Alternativamente, puede simplemente imprimir las columnas 0, 1, 2, 4 y 5, usando

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

información relacionada