web-dev-qa-db-ja.com

パーセント値より大きい行をフィルタリングする

こんにちは、85%以上のラインをフィルタリングする必要があります。

Forward:Score行とその行のパーセンテージの終わりに従ってフィルタリングする必要があります。

サンプルファイル:

Scores for this hit:
>ocu-miR-191-5p NC_013669.1 181.00  -24.77  2 22    123304956 123304978 20  85.00%  85.00%


   Forward: Score: 181.000000  Q:2 to 22  R:190316850 to 190316872 Align Len (20) (85.00%) (85.00%)

   Query:    3' gtCGACGAAAACCCTAAGGCAAc 5'
                  |||||| | ||| ||||||| 
   Ref:      5' gtGCTGCTATAGGGTTTCCGTTc 3'

   Energy:  -24.910000 kCal/Mol

Scores for this hit:
>ocu-miR-191-5p NC_013669.1 175.00  -23.66  2 21    163478767 163478790 20  85.00%  85.00%


   Forward: Score: 173.000000  Q:2 to 22  R:1340814 to 1340836 Align Len (20) (80.00%) (80.00%)

   Query:    3' gtCGACGAAAACCCTAAGGCAAc 5'
                  ||||| |  ||| ||||||| 
   Ref:      5' caGCTGCCTGCGGGCTTCCGTTa 3'

   Energy:  -27.510000 kCal/Mol

resultは次のようになります。

>ocu-miR-191-5p NC_013669.1 181.00  -24.77  2 22    123304956 123304978 20  85.00%  85.00%


   Forward: Score: 181.000000  Q:2 to 22  R:190316850 to 190316872 Align Len (20) (85.00%) (85.00%)

   Query:    3' gtCGACGAAAACCCTAAGGCAAc 5'
                  |||||| | ||| ||||||| 
   Ref:      5' gtGCTGCTATAGGGTTTCCGTTc 3'

   Energy:  -24.910000 kCal/Mol

私はこれらのコマンドを試しました、

awk '{if($14>=85)print$_}' < output.txt 
awk '$14 >= 85' output.txt
awk - F%) '$14 >= 85' output.txt

私のような質問があるこのウェブサイトで検索しますが、それらは私の問題を解決しませんでした。私が試したコマンドラインは、85%のスコアも含まれているため、他のラインも使用しました。 。手伝っていただけませんか?私はubuntuを使い始めたばかりですが、よくわかりません...

1
top5

これを試して:

_awk '{RS=">"; FS=" "; original_block=$0; gsub(/\(|\)|%/,""); if ($25 >= 85) print original_block}' example.txt > output.txt
_

説明:

  • _RS=">"_は、入力を_>_で始まるブロックとして扱います。
  • _FS=" "_は、フィールド区切り文字をスペースとタブに設定して、正しいフィールド数を取得します。
  • _original_block=$0_は、元のブロックを括弧_()_とパーセント記号_%_で保存し、後で印刷します。
  • gsub(/\(|\)|%/," ")は、_()_および_%_を削除して、数値を一致させることができるようにします。
  • if ($25 >= 85)は、そのブロックの25番目のフィールドの数値の値が_85_以上かどうかを確認します。

  • _print original_block_は、一致するブロック全体を元の形式で出力します。

1
Raffa