Afficher une ligne d'un fichier à partir d'un numéro de ligne

Afficher une ligne d'un fichier à partir d'un numéro de ligne - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 11-02-2008 à 09:48:24    

salut,
 
y a-t-il une commande qui permette de prendre en option un numéro de ligne pour afficher cette ligne depuis un fichier ?
grep/cat/... ne l'ont pas visiblement :/
 
merci :)


---------------
:: Light is Right ::
Reply

Marsh Posté le 11-02-2008 à 09:48:24   

Reply

Marsh Posté le 11-02-2008 à 09:58:30    

awk ?
head/tail ?


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 11-02-2008 à 10:00:36    

head et tail je voulais éviter ;)
 
awk, hum faut que je vois ;)
 
en fait je cherchais une commande qui fasse ça en une seule fois


---------------
:: Light is Right ::
Reply

Marsh Posté le 11-02-2008 à 10:05:55    

bon tant pis, j'ai fait à la porc avec head/tail, ça rame bien :D
 
merci quand même ;)


---------------
:: Light is Right ::
Reply

Marsh Posté le 11-02-2008 à 10:15:58    

Après avoir regardé vite fait :

awk 'NR==3' infile


devrait t'extraire la 3ème ligne


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 11-02-2008 à 10:25:43    

ah oui effectivement merci :)
 
c'est plus rapide mais pas tellement finalement :??:


---------------
:: Light is Right ::
Reply

Marsh Posté le 11-02-2008 à 16:37:02    

sed -n 3p infile


Message édité par matafan le 11-02-2008 à 16:37:17
Reply

Marsh Posté le 12-02-2008 à 08:58:07    

merci ;)


---------------
:: Light is Right ::
Reply

Marsh Posté le 22-02-2008 à 12:12:05    

Pour les perfs, ca dépend si tu veux extraire juste une ligne, ou plusieurs.

 

Les trucs genre :


head -$i fichier2.txt | tail -1
sed -n "$i p" fichier2.txt
awk "NR==$i" fichier2.txt
nl fichier2.txt | grep "[    ]\+$i[   ]\+" | cut -f 2


c'est bien pour extraire juste une ligne occasionnellement, mais c'est
très mauvais si tu dois répéter l'opération, tu lis tout le fichier à chaque fois que tu veux une ligne (enfin presque tout)

 

Et avec la solution avec pipe tu prends cher en plus :D
Si je tente la totale (pour rire, niveau algo c'est archi merdique):


for((i=0 ; i<`cat fichier.txt | wc -l` ; i++)); do
    head -$i fichier2.txt | tail -1
done

c'est à dire à chaque itération 2 lectures complètes du fichier + 2
pipes (test du for + corps du for), la commande time m'indique
gentillement 23 secondes pour lire 200 lignes sur ma machine.

 

Evidemment là faut utiliser des file descriptors + un compteur, comme ca ca roule  :hello:


Message édité par Xavier_OM le 22-02-2008 à 12:12:52

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 22-02-2008 à 17:06:43    

;)


---------------
:: Light is Right ::
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed