1 votes

Filtrer les lignes qui sont supérieures à une valeur de pourcentage

Bonjour, j'ai besoin de filtrer les lignes qui sont supérieures et égales à 85%.

J'ai besoin de filtrer en fonction de Forward : Ligne de score et fin du pourcentage de cette ligne.

Exemple de fichier :

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

En résultat devrait se présenter comme suit :

>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

J'ai essayé ces commandes,

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

J'ai cherché sur ce site des questions comme la mienne mais elles n'ont pas résolu mon problème. Les lignes de commande que j'ai essayées ont aussi pris l'autre ligne parce que la ligne contenait aussi le score de 85%. . Pourriez-vous m'aider ? Je viens de commencer à utiliser ubuntu, je ne m'y connais pas très bien...

1voto

Raffa Points 11919

Essayez ceci :

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

Explication :

  • RS=">" traitera les entrées comme des blocs commençant par > .

  • FS=" " définira votre séparateur de champs en espaces et tabulations pour obtenir le bon nombre de champs.

  • original_block=$0 sauvegardera le bloc original avec les parenthèses () et le signe du pourcentage % à des fins d'impression ultérieure.

  • gsub(/\(|\)|%/," ") supprimera () y % afin que le numéro puisse être mis en correspondance.

  • if ($25 >= 85) vérifie si la valeur du nombre figurant dans le 25e champ de ce bloc est supérieure ou égale à 85 .

  • print original_block imprime l'ensemble du bloc correspondant dans son format d'origine.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X