
私はこれが単純な問題だと思いますが、何が起こっているのかわかりません。次のファイルがあります。
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'