Unix awk, função de flag, multiple if condition

1

Eu tenho um documento grande e estou trabalhando em dois padrões com o comando flag:

/Nodes/ {f=1} /EndNodes/ {f=0}

Eu recebo a saída desejada e agora tenho que filtrar isso para obter 20, 31 e 32 como saída. Eu estou usando este comando:

{if ($2 + 0 >= 0 && $3 + 0 == 0 && max = $4)
{print $1}}

Mas eu recebo este resultado:

20,31,32,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34.

Observe que os números de 18 a 34 cumprem a condição max = $4 . Alguma sugestão?

    
por Humberto Bernui 27.08.2017 / 13:38

1 resposta

4

Como a steeldriver apontou, um único = é uma operação de atribuição, que resulta em um valor - aquele que você está atribuindo. Se esse valor for positivo (como os números de 18 a 34 são), então a atribuição valor é positiva, o que é "true" no awk.

Basta alterar max = $4 para max == $4 para torná-lo um teste de comparação em vez de uma atribuição.

    
por 27.08.2017 / 13:53

Tags