Removendo espaço em branco usando sed, mas ignorando o carimbo de data e hora

0

Eu queria remover espaço em branco de um arquivo CSV, o que eu posso fazer usando s/\ //g , mas ao mesmo tempo eu quero evitar a remoção do espaço entre os campos que tem registros de data e hora, por exemplo "06-JAN-15 13:20:00" : atualmente associa-se a eles, o que era esperado "06-JAN-1513:20:00" .

Uma solução é permitir que ela exclua todos os espaços em branco e, em seguida, grep para a data 06-JAN-15 e adicione espaço após ela. Não tenho certeza de como isso pode ser feito.

Exemplo de arquivo CSV: (apenas uma linha)

294335,"17-APR-15 00:00:00 ",6258,"C"," <-----huge blank space--->,"07-JAN-15 00:00:00"

huge blank space conterá mensagem XML, se não estiver em branco.

    
por JavaQuest 30.06.2015 / 21:03

3 respostas

1

Não é sed, mas aqui está uma solução usando asserção lookbehind negativa (?<!...) em perlre.

perl -pe 's/(?<!\d\d-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-\d\d) //g'
    
por 30.06.2015 / 21:54
0

Usando awk :

< input awk 'BEGIN {FS=OFS=","} {gsub(" ", "", $1); gsub(" ", "", $3); gsub(" ", "", $4); gsub(" ", "", $5); print}'

Isso terá o efeito de remover qualquer caractere de espaço do primeiro, terceiro, quarto e quinto campos separados por vírgula em cada registro.

    
por 30.06.2015 / 23:07
0

Você pode realmente analisar o arquivo como um arquivo CSV e retirar espaço em branco extra:

ruby -rcsv -ne '
    row = CSV::parse_line($_)
    puts CSV::generate_line(row.map {|field| field.strip})
' file
294335,17-APR-15 00:00:00,6258,C,"",07-JAN-15 00:00:00
    
por 30.06.2015 / 23:20