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é ?
....