Outra variante é "se $ 3 é diferente de 23, imprima"
awk -F';' '$3 != 23' file
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
Outra variante é "se $ 3 é diferente de 23, imprima"
awk -F';' '$3 != 23' file
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.
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
Tags bash text-processing awk sed csv