
Quero remover um array que não tem tamanho fixo.Por exemplo
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"
A seguinte matriz deve ser convertida no formato abaixo
file_edited.csv
001,"Geography",TRUE,1,"CHARLIE"
002,"History",FALSE,0,"DAVID"
003,"Mathematics",TRUE,1,"SAM"
Como fazer isso na linha de comando.
Responder1
Tenho certeza de que existem várias maneiras diferentes de fazer isso, prefiro sed
:
sed 's/"{.*}",//'
SobreGNU/Linux(GNU sed
), use:
sed 's/"{.*}",//' csv
001,"Geography",TRUE,1,"CHARLIE"
002,"History",FALSE,0,"DAVID"
003,"Mathematics",TRUE,1,"SAM"
OS X(BSD sed
, observe a -E
bandeira):
sed -E 's/"{.*}",//' csv
001,"Geography",TRUE,1,"CHARLIE"
002,"History",FALSE,0,"DAVID"
003,"Mathematics",TRUE,1,"SAM"
Responder2
Use Python e seu módulo CSV, por exemplo, o seguinte 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
A mágica acontece na penúltima linha do comando. Em Python, os arrays começam no índice 0, assim row[3]
como a quarta coluna; então, este simplesmente remove a quarta coluna de cada registro.
Alternativamente, você pode simplesmente imprimir as colunas 0, 1, 2, 4 e 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