Script - Linux et OS Alternatifs
Marsh Posté le 01-10-2002 à 18:40:45
je me réexplique, dans un fichier j'ai un nombre à chaque ligne et je voudais garder uniquement les lignes contenant ce nombre inferieurs (ou supèrieur) à un nombre donné 
 
... je sais pas si c'est plouclair
Marsh Posté le 01-10-2002 à 18:48:07
| buchu a écrit a écrit  : je me réexplique, dans un fichier j'ai un nombre à chaque ligne et je voudais garder uniquement les lignes contenant ce nombre inferieurs (ou supèrieur) à un nombre donné ... je sais pas si c'est plouclair | 
 
 
oui bah head devrait pouvoir t'aider 
man head
Marsh Posté le 01-10-2002 à 19:04:41
in=$1 
out=toto 
max=50  
 
for i in `cat $in`; do [ $i -lt $max ] && echo $i >> $out; done
Marsh Posté le 02-10-2002 à 10:46:07
merci  
 
 
mais malheureusement je n'ai pas qu'un nombre sur la ligne, j'ai aussi du texte... 
 
j'avais pensé à un egrep '[20000-30000]' pour choper toutes les lignes entre 20000 et 30000 mais ca marche pas... 
 
casse couille comme truc 
Marsh Posté le 02-10-2002 à 10:50:52
gawk est ton ami  
 
 
avec les expressions regulieres ca doit etre envisageable 
Marsh Posté le 02-10-2002 à 11:27:44
Avec n=10 : 
 
perl -ne 'print if (/(\d+)/ && $1>10)' 
 
edit : en supposant qu'il n'y ait qu'un seul nombre par ligne. 
C'est difficile de répondre à une question qui est mal posée... 
Marsh Posté le 02-10-2002 à 12:13:33
bon je vais faire du concret 
 
j'ai un fichier : 
456546 blalalalalalalalal 
456548 blbllbaaa 
456549 blolboblbo 
456550 balalalal 
456555 blibliblbi 
 
et je voudrais garder que es lignes comprises entre 456548 et 456550 
 
voiloiu
Marsh Posté le 02-10-2002 à 17:06:51
| buchu a écrit a écrit  : bon je vais faire du concret j'ai un fichier : 456546 blalalalalalalalal 456548 blbllbaaa 456549 blolboblbo 456550 balalalal 456555 blibliblbi et je voudrais garder que es lignes comprises entre 456548 et 456550 voiloiu | 
 
 
j'imagine qu'en maitrisant perl , ça pourrait être plus condensé mais voici ma version (testée) : 
 
 # on inscrit dans un fichier numero de ligne:valeur numerique 
 grep -n "^[0-9]\+" nbr | awk '{print $1}' > nbr2 
 
 # on parse ce fichier temporaire (nbr2) et on compare les valeurs par rapport au min et max voulus et on inscrit les 'bonnes' lignes dans un autre fichier temporaire (nbr3) 
 for i in `cat nbr2`;do nb=`echo $i | cut -f2 -d:`; ln=`echo $i | cut -f1 -d:`; [ $nb -gt $min ] && [ $nb -lt $max ] && echo $ln >> nbr3 ;done 
 
 # maintenant qu'on a les occurences , il faut extraire les lignes du fichier originel 
 for i in `cat nbr3`;do cat nbr | head -$i | tail -1 >> final; done 
 
ca tourne mais c'est un peu 'lourd'. En perl ça doit pas etre mal je pense mais j'en ai pas les moyens 
Marsh Posté le 01-10-2002 à 18:25:39
hellop
qq a une idée sur un egrep ou sed ou autre suprimant toutes les lignes ou un nombre est inferieur à un nombre donné ?
....