AWK manipulação de csv

0

Eu tenho um arquivo csv contendo algo assim:

abc;!!!!;22
abc;!!!!;23
23;!!!!!;22

Agora quero deletar todas as linhas que contiverem um 23 na terceira coluna.

Como existe a possibilidade de haver 23 no primeiro. Deve verificar apenas as correspondências na terceira coluna.

Eu preferiria a solução awk, já que eu realmente quero aprender, mas se alguém puder me dizer como fazer isso com sed, eu ficaria impressionado!

Deve funcionar de forma semelhante a esse mau exemplo meu.

awk -F ";" (if $3="23") delete Line
    
por M.Häfner 20.09.2018 / 17:36

3 respostas

1

Outra variante é "se $ 3 é diferente de 23, imprima"

awk -F';' '$3 != 23' file
    
por 20.09.2018 / 18:29
0

Uma ligeira modificação da sua abordagem pode já funcionar (não testada):

awk -F ";" '$3 ~ /23/ {next} 1' file

"contém" significa "tem, entre outros". Se você quer dizer "igual", use o ==  operador.

    
por 20.09.2018 / 17:45
0

com sed

sed '/;23$/d' infile

Se você pode ter mais de 3 colunas

sed '/\([^;]*;\)\{2\}23\(;\|$\)/d' infile

Ou com ERE

sed -E '/([^;]*;){2}23(;|$)/d' infile
    
por 20.09.2018 / 18:38