modifica coluna específica com sed ou awk

2

Eu tenho um arquivo CSV com esta aparência:

qw12er,foo,0 bn5mgh
rt8yp,foo,10 gh78jk
bn852mv,foo,852 78ghjkh
tgbr,foo,10 ujmyhn
wsx2d,foo,0000 ui52ohn
tgbr,foo,7418529 ujmyhn
ikl896o,foo,22 wsxdc52

Eu quero modificar a terceira coluna e remover todos os números e espaços do início da terceira coluna.

A saída seria a seguinte:

qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52
    
por alrz 09.01.2017 / 08:32

4 respostas

4

Outra solução com awk :

awk -F, 'sub("^[0-9]+\s","",$3)' OFS=, file 

Saída:

qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52

Explicação:

  • -F, : defina a vírgula como separador de campos de entrada

  • OFS=, : defina a vírgula como separador de saída (um espaço por padrão)

  • sub("^[0-9]+\s","",$3) : apaga números seguidos por um espaço no início da string $3 e imprime a linha atual (porque "print" é a ação padrão em awk )

Desta forma, você pode editar a coluna desejada e imprimir todos os outros (que em geral podem ser muitos).

    
por 09.01.2017 / 19:24
3

Eu usei awk :

awk -F"[ ,]" '{print $1","$2","$4 }' yourfile 

O resultado:

qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52
    
por 09.01.2017 / 09:06
1

Em awk :

awk '{FS="[, ]"; OFS=","; print $1, $2, $4}' filename

Em sed :

sed 's/^\(.*,\)[0-9]* \([^,]*\)$//' filename
    
por 09.01.2017 / 11:05
0

De acordo com os dados mostrados, pode ser o seguinte sed

sed -r 's/,[0-9 ]+ /,/' file.csv

Em caso de variação de dados, regex deve ser alterado para mais strong

    
por 09.01.2017 / 11:00