AWK / manipulação de strings: como extrair strings de uma coluna e compará-las com um número antes de imprimir a linha

0

Eu tenho uma lista de dados em uma tabela. Usando o awk para retirar a coluna 5, consegui diferenciar os dados entre as linhas. Se o entry at column 5 for more than 4 , o row should be printed .

No entanto, há uma entrada que vem na forma de uma string que não pode ser comparada diretamente a um número, antes de decidir se deve ser impressa ou não. Essa entrada tem um parêntese ao redor do número que deve ser comparado.

Aqui está o exemplo da coluna 5:

on
%)
%
replica
(

0
(100.0    <= this one
0.0
10.8
13.8
12.0
16.3
13.2
12.1
11.4
10.4
0.0
devices:

Do exemplo acima, devo imprimir as linhas 8 e 10 a 17 da tabela.

Vou fornecer uma tabela de exemplo (file.txt):

1        0          0        0          on
2        0          0        0          %)
3        0          0        0          %
4        0          0        0          replica
5        0          0        0          (
6        0          0        0          
7        0          0        0          0
8        0          0        0          (100.0
9        0          0        0          0.0
1        0          0        0          10.8
1        1          0        0          13.8
1        2          0        0          12.0
1        3          0        0          16.3
1        4          0        0          13.2
1        5          0        0          12.1
1        6          0        0          11.4
1        7          0        0          10.4
1        8          0        0          0.0
1        9          0        0          devices:

Minha tentativa:

awk '{if (($5>=4)) print;
else
    NUMBER=($5 | grep -o -E '[0-9]+');
    if (($NUMBER>=4)) print' file.txt

Erro:

awk: syntax error near line 2
awk: illegal statement near line 2
awk: syntax error near line 3
awk: illegal statement near line 3
    
por tthhss 07.06.2018 / 12:59

1 resposta

1

Você pode remover os caracteres não numéricos antes de comparar:

$ awk '{x=$5; gsub(/[^0-9.]/,"",x);} x+0>=4' file.txt
8        0          0        0          (100.0
1        0          0        0          10.8
1        1          0        0          13.8
1        2          0        0          12.0
1        3          0        0          16.3
1        4          0        0          13.2
1        5          0        0          12.1
1        6          0        0          11.4
1        7          0        0          10.4
    
por 07.06.2018 / 13:11