awkバージョン:GNU Awk 4.1.1、API:1.1(GNU MPFR 3.1.2-p3、GNU MP 6.0.0)
次の入力があります(小さい例)。
Lh8627_00055___transposase_3 c368296268f9d0100b8a65d2cd57aaf2 424 Pfam PF01610 Transposase 297 404 1.8E-11 T 22-06-2017 IPR002560 Transposase IS204/IS1001/IS1096/IS1165, DDE domain
Lh8627_05835___transposase_1 212014f87f94178312dac70f061d81c6 469 Pfam PF06782 Uncharacterised protein family (UPF0236) 30 399 4.5E-37 T 22-06-2017 IPR009620 Uncharacterised protein family UPF0236
Lh8627_03700___transposase_3 916962acc8271c66b217ab903d836768 401 Pfam PF06782 Uncharacterised protein family (UPF0236) 201 334 4.4E-6 T 22-06-2017 IPR009620 Uncharacterised protein family UPF0236
Lh8627_01850___transposase_1 05e46b0f13cf6aa7db8adcf5fd3fd39d 409 Pfam PF01548 Transposase 8 160 3.0E-29 T 22-06-2017 IPR002525 Transposase, IS111A/IS1328/IS1533, N-terminal GO:0003677|GO:0004803|GO:0006313
9列の値が1.0E-10未満の行をフィルタリングしたいと思います。
私の注文はですawk '$9 < 1.0E-10' my file
。ただし、たとえば、上記の小さな入力では、3行目はフィルタリングされません。私は何が間違っていましたか?
答え1
私の問題は、awkがタブだけでなく区切り文字としてスペースを使用していることを理解していないことです。一度追加されたら-F'\t'
動作します。量の比較がかなり大丈夫ですね。
答え2
あなたの命令はとても素晴らしいです。しかし、あなたの入力はそうではありません。あなたの例では、9番目のメンバーが常に予想される数字ではありません。
$ awk '{print $9}' <your_file>
1.8E-11
(UPF0236)
(UPF0236)
3.0E-29
たとえば、次を使用して不要な要素を削除して入力を並べ替えることができますsed
。
sed 's/protein family (UPF0236)//' <your_file> | awk '$9 < 1.0E-10'