我有一个表中的数据列表。通过使用 awk 提取第 5 列,我能够区分行之间的数据。如果是entry at column 5
,more than 4
则row 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