Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
commande qui donne la ligne n d'un fichier
Envoyé par: distribution

Bonjour,

pour ce j'utilise head et tail de la manière suivante

$i = numéro de ligne dans le fichier $chemin

head -n$i $chemin | tail -n1


il y a t il plus simple ?

Merci

Poste le Wednesday 18 February 2009 16:30:04
Répondre     Citer    
Re: commande qui donne la ligne n d'un fichier
Envoyé par: NBaH

sed -n ${i}p "$chemin"
...
?

Poste le Wednesday 18 February 2009 16:44:02
Répondre     Citer    
Re: commande qui donne la ligne n d'un fichier
Envoyé par: distribution

oui je l'ai donné tout à l'heure , la différence entre ma nouvelle methode et l'ancienne est qu'avec head -n$i $chemin | tail -n1 dans une boucle je mets moins d'une minute pour boucler un fichier de plusieurs milliers de ligne alors que qu'avec sed -n ${i}p "$chemin" dans uen boucle , la boucle dure plusieurs dizaine de minutes !

je ne vais pas pouvoir utiliser par la suite la commande sed pour ce cas , à ta manière qui est très rapide ,car maintenant je dois dans un fichier texte ou csv (issu d'un fichier xls ) de plusieurs milliers de ligne comparer entre deux lignes deux "colonnes" + d'autres opérations ... Je sais le faire dans une boucle ou je décortique étape par étape la ligne , ou je peux garder en mémoire la ligne précédente etc , mais je ne sais pas le faire avec sed et ça me prendrait trop de chercher et d'apprendre ( je suis dans l'urgence ) ;-)

juste une question , car je ne sais même plus comment je m'appelle (20 onglets dans firefox sur des pages d'info de commande unix et les commandes qui se mélangent dans la tête )

comme faire le test suivant
la variable $premier est dans [A-Z]

avec la commande sed c'était direct ^[A-Z]

mais dans une condition if je ne sais faire que

if [ $premier == "A" ] || [ $premier == "B" ] ...

c'est quoi la bonne commande ?

if [ $premier == ? ]


Merci

[ $premier in []]

Poste le Wednesday 18 February 2009 17:07:42
Répondre     Citer    
Re: commande qui donne la ligne n d'un fichier
Envoyé par: distribution

ayé j'ai trouvé , enfin pas avec if then mais avec case

case $premier in

([A-Z] ) action1 ;;

esac

mais si il y a quelque chose d'équivalent avec if [ ] then je prends

Poste le Wednesday 18 February 2009 17:17:53
Répondre     Citer    
Re: commande qui donne la ligne n d'un fichier
Envoyé par: NBaH

ici
 help typeset
typeset: typeset [-afFirtx] [-p] name[=value] ...
    Obsolete.  See `declare'.
Il essaie de déclarer la variable en tant que nombre, si ça marche, c'est un nombre, sinon c'est du texte !

Poste le Wednesday 18 February 2009 17:39:56
Répondre     Citer    
Re: commande qui donne la ligne n d'un fichier
Envoyé par: NBaH

Ça me plaisait bien, mais finalement, ça semble ne pas fonctionner.
:-((

Poste le Wednesday 18 February 2009 17:58:15
Répondre     Citer    
Re: commande qui donne la ligne n d'un fichier
Envoyé par: peck

La même en plus rapide :

sed -n "${i}p;${i]q" "fichier"

[linux-attitude.fr]

Poste le Wednesday 18 February 2009 18:33:17
Répondre     Citer    
Re: commande qui donne la ligne n d'un fichier
Envoyé par: NBaH

J'ai reçu quelques éclaircissements concernant la lecture d'une ligne par sed :
sed va lire le fichier jusqu'à la ligne $i, afficher la ligne, puis va continuer à lire le fichier. Il faut donc, comme le suggère peck, utiliser
sed -n ''${i}'{p;q}'
_q_ pour quit, se qui interrompt sed immédiatement après l'affichage (comme le fait head) !

Par contre, sur des fichiers de quelques milliers de lignes, je remarque un léger avantage pour head | tail
...
?

Poste le Thursday 19 February 2009 03:54:43
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
commande qui donne la ligne n d'un fichier
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons