remove uma coluna de matriz com tamanho diferente

1

Eu quero remover uma matriz que não tenha um 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.

    
por rkr 24.10.2016 / 08:33

2 respostas

2

Use o 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 segunda e última linha do comando. No Python, as matrizes começam no índice 0, então row[3] é 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
    
por 24.10.2016 / 08:50
2

Tenho certeza de que existem várias maneiras diferentes de realizar isso, prefiro sed :

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

Em GNU / 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 o sinal -E ):

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