удалить столбец массива с разной длиной

удалить столбец массива с разной длиной

Я хочу удалить массив, который не имеет фиксированного размера. Например

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"

Следующий массив необходимо преобразовать в следующий формат

file_edited.csv

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

Как это сделать в командной строке.

решение1

Я уверен, что есть множество разных способов сделать это. Я предпочитаю sed:

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

НаGNU/Linux(GNU sed), используйте:

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

ОС X(BSD sed, обратите внимание на -Eфлаг):

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

решение2

Используйте Python и его модуль CSV, например, следующую отдельную команду:

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

Магия происходит в предпоследней строке команды. В Python массивы начинаются с индекса 0, как row[3]и четвертый столбец; так что этот просто удаляет четвертый столбец в каждой записи.

В качестве альтернативы вы можете просто напечатать столбцы 0, 1, 2, 4 и 5, используя

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

Связанный контент