awk condition not working

3

Eu tenho um comando abaixo, mas não produz nada. Se eu mantiver a print $0 ou qualquer coluna (por exemplo, print $2 , print $3 ), ela será impressa como deveria. Parece que não lê a "declaração if".

awk -F"," '{if ($2 >= 09170000000 && $2 <= 09179999999) print $0 }' filename

Arquivo de amostra:

"dummy","09171234567","","dummy","dummy","dummy","dummy"
    
por user257133 24.10.2017 / 13:33

2 respostas

4

Como você está dizendo awk para ler os dados como delimitados por vírgula, as aspas farão parte dos dados e as comparações de números inteiros falharão:

$ awk -F',' '{ print $2 }' file.txt
"09171234567"

Em vez disso, permita que a vírgula fique entre aspas:

$ awk -F'"?,"?' '{ print $2 }' file.txt
09171234567

A expressão "?,"? significa "uma vírgula, com aspas duplas opcionais antes e / ou depois".

O código final awk :

$ awk -F'"?,"?' '$2 >= 09170000000 && $2 <= 09179999999' file.txt
"dummy","09171234567","","dummy","dummy","dummy","dummy"

Uma condição sem {...} bloqueará a linha de entrada atual se for avaliada como verdadeira.

    
por 24.10.2017 / 13:47
4

Porque sua coluna # 2 é um texto quando está na cota "..." e você está fazendo uma comparação inteira. Faça o seguinte para definir " como um dos delimitadores e, em seguida, compare na coluna 5 que, com base em , e " , agora é a coluna 5:

awk -F'[",]' '{if ($5>= 09170000000 && $5 <= 09179999999) print $0 }' infile

Ou resumindo:

awk -F'[",]' '$5>= 09170000000 && $5 <= 09179999999' infile

Quando usamos dois delimitadores , e " , seu número de colunas estará em (col#*3)-1 position agora, significa que se estivesse na coluna $30 antes, agora está na coluna $89 .

    
por 24.10.2017 / 13:43

Tags