テーブルにデータのリストがあります。 awkを使用して5列を抽出することで、行間のデータを区別することができました。もしそうなら。entry at column 5
more than 4
row should be printed
ただし、1つの項目は、印刷するかどうかを決定する前に数値と直接比較できない文字列形式で提供されます。項目には、比較する数字の周りに角かっこがあります。
以下は列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