0
votes

Grep une chaîne avec nombre supérieur à 45

J'ai plusieurs fichiers dans un répertoire. Je veux extraire chaque ligne dans tous les fichiers contenant qui a une valeur entière supérieure à 45.

Actuellement, j'utilise: xxx

Son affichage de tous les fichiers cette chaîne "IO a repris après" Je veux mettre un autre paramètre qui sera grep toutes les lignes "IO a repris après [numéro> 45] secondes"


3 commentaires

Bienvenue pour, pourriez-vous poster des échantillons de votre entrée_FILE et de votre sortie attendue dans votre question dans les balises de code pour plus de clarté.


Faire (ou peut) les chiffres ont un point décimal?


Vous avez accepté ma réponse, donc cela semble être suffisant pour vous. Quoi qu'il en soit, vous devriez répondre aux commentaires et rendre votre question plus claire. Après avoir réaffecté la question que j'ai remarquée «valeur entière supérieure à 45». Pouvez-vous confirmer que les chiffres ne contiennent pas de point décimal? Question supplémentaire: Les chiffres peuvent-ils avoir des zéros de premier plan, par exemple. 0045 au lieu de 45?


3 Réponses :


5
votes

Il est préférable d'utiliser awk pour ceci: xxx

cette recherche de la chaîne "IO reprise après", si cette chaîne est trouvée, il faut tout Après cette chaîne et convertissez-la en un numéro: Si la sous-chaîne après "IO a repris après" commence par un numéro, il sera converti en ce numéro lorsque nous allons simplement ajouter zéro à celui-ci.

Ce ne sera que Travailler si la ligne ressemble à: xxx

x et y sont des caractères aléatoires, le soulignement est une séquence de blancs , n est un chiffre.

Vous pouvez le tester avec l'ensemble de commandes suivant: xxx

quelle sortie: < / p> xxx


0 commentaires

0
votes

Vous pouvez utiliser des alternatives et répéter des comptes pour définir un motif de recherche pour les nombres supérieurs à 45.

Cette solution suppose que les chiffres sont des nombres entiers sans point décimal. P>

grep 'IO resumed after 0*\(4[5-9]\|[5-9][0-9]\|[1-9][0-9]\{2,\}\)'


3 commentaires

@Markschechell merci pour la suggestion!


@Marksschellell Si nous modifions la question de plus grand que 45, en plus grand que ou égal trop 45, le point décimal est hors de propos si la chaîne "secondes" est supprimée du grep.


Notez que la regex [0-9] \ \ \ \ \ \ \ \ \ \ \ \ \ \ \} (code> correspondra également à 000 et tous les numéros inférieurs à 45. Il est donc préférable d'appliquer le premier numéro à être plus grand que 0 et remplacer cela par. [1-9] [0-9] \ {2, \} . De plus, si vous ajoutez une séquence de zéros à la chaîne, vous devenez une balle à bullet: 0 * \ (4 [5-9] \ | [5-9] [0-9] \ | [1-9] [ 0-9] \ {2, \} \)



0
votes

On dirait que je dois apprendre awk jusqu'à ce que j'ai eu une solution bash. Si quelques secondes sans point décimal, alors ceci: xxx

sinon nous devons utiliser bc : xxx


0 commentaires