2013-05-16 7 views
1

Je n'arrive pas à trouver si le numéro de ligne actuel est plus grand que la ligne suivante alors il devrait imprimer quelque chose comme par exemple "le nombre 53 est supérieur à 23" et ensuite comparer les deux lignes suivantes "le nombre 54 est inférieur à 76". Je pense quelque chose le long des lignes NR% 2, mais je ne sais pas quoi faire après cela. Tous les conseils ou suggestions sur la façon dont cela serait fait seraient grandement appréciés merci.Trouver un plus grand nombre en utilisant awk

Un exemple de ce fichier est:

53 
23 
54 
76 
12 
42 

Résultat attendu

the number 53 is greater than 23 
the number 54 is less than 76 
the number 12 is less than 42 
+0

Pourquoi modifier le fichier d'entrée après vous obtenez deux réponses mais ne pas améliorer l'explication ou ajouter la sortie attendue? –

+0

désolé j'ai accidentellement poussé le message sans terminer le dernier bit – user2389266

+0

Les lignes supplémentaires dans les fichiers n'ajoutaient rien à la question, ils viennent de briser les réponses existantes. Avec des questions comme celle-ci, vous devriez publier votre fichier d'entrée ** avec ** la sortie attendue. –

Répondre

3

ce serait ce que vous voulez:

awk '!(NR%2){print p>=$0?p">="$0:p"<"$0;next}{p=$0}' file 

sortie:

53>=23 
54<76 
12<42 

sortie avec votre nouveau fichier d'entrée:

53>=23 
54<76 
12<42 
43>=4 
1<63 
34<56 

vous pouvez ajuster le texte ("plus/moins"). gérer également le cas == si vous le souhaitez.

+0

Cela fonctionne, merci pour l'entrée – user2389266

0

Juste pour le plaisir ici est une façon de le faire avec coreutils, bc et sed:

<infile paste -d' ' - - <(<infile paste -d'<' - - | bc) | 
sed 's/1$/less/; s/0$/greater/; s/([0-9]+) ([0-9]+) (.*)/the number \1 is \3 than \2/' 

Sortie:

the number 53 is greater than 23 
the number 54 is less than 76 
the number 12 is less than 42 

Explication

Les tubes de pâte interne n1<n2 à bc avec renvoie un vecteur binaire. La pâte externe colonne ce vecteur avec des paires de nombres de l'entrée. sed réorganise son entrée en fonction du vecteur binaire.

Donc, si vous ne souhaitez que savoir si des paires de lignes sont plus ou moins de l'autre ce bit serait suffisant:

<infile paste -d'<' - - | bc 

Sortie:

0 
1 
1 
Questions connexes