AWK / 字符串操作:如何从列中提取字符串并在打印行之前将其与数字进行比较

AWK / 字符串操作:如何从列中提取字符串并在打印行之前将其与数字进行比较

我有一个表中的数据列表。通过使用 awk 提取第 5 列,我能够区分行之间的数据。如果是entry at column 5more than 4row should be printed.

然而,有一个条目以字符串的形式出现,在决定是否应该打印之前,无法直接与数字进行比较。该条目在要比较的数字周围有一个括号。

这是第 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:

从上面的例子中,我应该打印表的第 8 行和第 10 行到第 17 行。

我将提供一个示例表(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:

我的尝试:

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

错误:

awk: syntax error near line 2
awk: illegal statement near line 2
awk: syntax error near line 3
awk: illegal statement near line 3

答案1

您可以在比较之前去掉非数字字符:

$ 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

相关内容