awkはフィールドを数値として認識しません

awkはフィールドを数値として認識しません

私はこれが単純な問題だと思いますが、何が起こっているのかわかりません。次のファイルがあります。

Scaffold_19:10402053-10402986   Scaffold_33:25064012-25064819   92.806  278 5   5   8   279 269 1   2.84e-107   388
Scaffold_6:54625155-54625833    Scaffold_33:6634011-6634353 96.774  248 6   2   1   248 97  342 1.21e-114   412
Scaffold_9:94800251-94801152    Scaffold_26:56326990-56327448   100.000 297 0   0   1   297 162 458 1.19e-155   549
Scaffold_20:79074547-79075122   Scaffold_20:79075175-79076351   93.269  208 11  3   1   208 972 1176    6.43e-82    303
Scaffold_18:6685836-6686898 Scaffold_19:81178714-81179662   99.789  949 1   1   114 1062    1   948 0.0 1740
Scaffold_18:46725018-46726185   Scaffold_18:46723864-46724938   84.309  752 73  29  1   710 323 1071    0.0 693
Scaffold_9:97974338-97975523    Scaffold_9:97976642-97978267    90.239  1045    81  18  155 1185    1   1038    0.0 1345
Scaffold_16:35667544-35671350   Scaffold_34:16160847-16161438   99.459  185 0   1   1   184 185 1   1.56e-90    335
Scaffold_33:47202231-47202984   Scaffold_33:47205382-47206652   94.763  611 31  1   3   613 642 1251    0.0 950
Scaffold_8:18583199-18586799    Scaffold_25:14231844-14235013   98.460  3116    43  3   1   3112    55  3169    0.0 5483

今やりたいことは、3番目の列に<=の行を数字で印刷することです。それは簡単ですよね?たとえば、$3 <= 100 の行を印刷します。

head q.filtered.noself.blastn|awk '$3 <= 100'

しかし、何も返しません!助けてください?これは、awkが3番目のフィールドが数値であることを認識していないのと同じです。

Ubuntu 20.04.2でmawk 1.3.4 20200120を使用しています。

以下はファイルの例です。 サンプル

編集:これはロケールの出力です。

locale
LANG=en_GB.UTF-8
LANGUAGE=en_GB:en
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC=fr_BE.UTF-8
LC_TIME=fr_BE.UTF-8
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY=fr_BE.UTF-8
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER=fr_BE.UTF-8
LC_NAME=fr_BE.UTF-8
LC_ADDRESS=fr_BE.UTF-8
LC_TELEPHONE=fr_BE.UTF-8
LC_MEASUREMENT=fr_BE.UTF-8
LC_IDENTIFICATION=fr_BE.UTF-8
LC_ALL=

ベストアンサー1

問題は、LC_NUMERIC=fr_BE.UTF-8このロケールには小数点区切りがあり、数値では,ない.ため、98.9数値と見なされないことです。表示するには:

$ echo "98.5" | LC_NUMERIC=C mawk '$1<100' 
98.5
$ echo "98.5" | LC_NUMERIC=fr_BE.UTF-8 mawk '$1<100' 
$ 

したがって、ロケールを.小数点区切りのロケールに変更するか、このコマンドに対して明示的にロケールを設定します。

head q.filtered.noself.blastn | LC_NUMERIC=C awk '$3 <= 100'

おすすめ記事