こんにちは、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を使い始めたばかりですが、よくわかりません...
これを試して:
_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
_は、一致するブロック全体を元の形式で出力します。