Usando o AWK para selecionar linhas com valor específico na coluna específica

2

Eu tenho um grande arquivo csv, que se parece com isso:

1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,25178
1,2,3,4,5,6,27986
1,2,3,4,5,6,-99

Eu quero selecionar apenas as linhas nas quais a sétima coluna é igual a -99, então minha saída será:

1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99

Eu tentei o seguinte:

awk -F, '$7 == -99' input.txt > output.txt
awk -F, '{ if ($7 == -99) print $1,$2,$3,$4,$5,$6,$7 }' input.txt > output.txt

Mas ambos retornaram um output.txt vazio. Alguém pode me dizer o que estou fazendo errado? Obrigado.

    
por Isabela Martins 21.10.2017 / 17:32

3 respostas

3

O arquivo no qual você executa o script possui finais de linha do DOS. Pode ser que tenha sido criado em uma máquina Windows.

Use dos2unix para convertê-lo em um arquivo de texto Unix.

Como alternativa, execute-o em tr :

tr -d '\r' <input.txt >input-unix.txt

Em seguida, use input-unix.txt com o código awk de outra forma correto.

Para modificar o código awk em vez do arquivo de entrada:

awk -F, '$7 == "-99\r"' input.txt >output.txt

Isso leva em conta o retorno do carro no final da linha.

Ou

awk -F, '$7 + 0 == -99' input.txt >output.txt

Isso força a sétima coluna a ser interpretada como um número, o que "remove" o retorno do carro.

Da mesma forma,

awk -F, 'int($7) == -99' input.txt >output.txt

também removeria o \r .

    
por 21.10.2017 / 18:34
1
awk -F, '{if($7==-99)print $0}'

fará isso ...

    
por 21.10.2017 / 18:20
0

Uma ligeira modificação na resposta de @ tonioc

awk '{if($7 == -99){print}}' file > outfile
    
por 27.04.2018 / 11:46