removendo “_” de um arquivo csv muito grande

1

Eu tenho um arquivo csv grande (120 GB) que se parece com isso:

"JE",865438083645,2012-12-05T23:07:36.000Z,24,"NQ",142,"658_55525",475035504705
"JE",875619112765,2012-12-05T23:58:04.000Z,4,"PG",144,"219_9221",835399289335
"JE",125495251245,2012-12-05T18:16:06.000Z,206,"PLJE",153,"763_60771",445355650435

Gostaria de remover o sublinhado e as aspas dos valores da sétima coluna (por exemplo, "658_55525" se torna 65855525 ). A ferramenta de importação para o banco de dados que estou usando não permite converter ou manipular o arquivo na importação.

Qual seria uma maneira eficiente de fazer isso a partir da linha de comando?

    
por amaatouq 29.05.2015 / 04:04

3 respostas

4

Eu não sei sobre eficiência, mas sed com uma expressão regular. Faça um backup do arquivo no caso de você cometer um erro de digitação, mas talvez algo assim:

sed -i  's/"\([0-9]\+\)_\([0-9]\+\)"//' bigcsvfile.csv

Edit: removeu o g, como kos apontou, nenhum g é necessário.

    
por Stephen 29.05.2015 / 04:16
1

Como seu arquivo é grande, sugiro usar gawk > 4.10.0 em vez de awk , que suporta edição no local.

Usando gawk > 4.10.0 :

gawk -i inplace 'BEGIN {FS=","; OFS=","}; {gsub(/["_]/,"",$7); print}' inputfile
  • -i inplace : informa gawk para editar o arquivo no local
Resumo do script

awk :

  • BEGIN {FS=","; OFS=","} : define o separador de campos e o separador do campo de saída como ,
  • gsub(/["_]/,"",$7) : substitui os caracteres " e _ contidos no sétimo campo do registro por uma string vazia
  • print : imprime o registro
por kos 14.06.2015 / 15:50
0

O Perl é simplesmente o mais rápido ao editar arquivos grandes.

perl -pi.bak -e 's/"([0-9]+)_([0-9]+)"/$1$2/' your_file.csv

Seu arquivo de backup está em

your_file.csv.bak

Sem um backup:

perl -pi -e 's/"([0-9]+)_([0-9]+)"/$1$2/' your_file.csv
    
por A.B. 29.05.2015 / 17:13