Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 27-07-2015 21:01:27

durn1818
Membre
Distrib. : Debian Jessy
Noyau : Linux 3.16.0-4-amd64
Inscription : 27-07-2015

[Résolu] Récupérer la ligne x d'un fichier

Bonsoir,

Si j'ai bien compris, la commande head retourne les dix premières lignes d'un fichier donné.

Étant donné un nombre x, quelle commande ou quel bout de code retournerait uniquement la ligne x d'un fichier donné ?

Cordialement

Dernière modification par durn1818 (07-08-2015 13:09:38)

Hors ligne

#2 27-07-2015 21:22:28

MrCHACHA
Membre
Distrib. : Debian8 jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : KDE 4.14.2
Inscription : 03-12-2014

Re : [Résolu] Récupérer la ligne x d'un fichier

salut dans un terminale saisis cette commande :

head -n ligne_x nom_du_fichier


il te retournera la ligne  ligne_x du fichier nom_du_fichier


- By Learning, doing and showing........
- "L'utopie ne signifie pas l'irréalisable, mais l'irréalisée."

Hors ligne

#3 27-07-2015 21:42:20

sogal
Black Metal Modo
Distrib. : Debian Testing
Noyau : 4.7
(G)UI : Gnome
Inscription : 09-05-2013
Site Web

Re : [Résolu] Récupérer la ligne x d'un fichier

MrCHACHA a écrit :

salut dans un terminale saisis cette commande :

head -n ligne_x nom_du_fichier


il te retournera la ligne  ligne_x du fichier nom_du_fichier


Non, en fait cela te retournera les n premières lignes du fichier.
Pour avoir la ligne x, combiner cette commande avec tail :

sogal 21:40:37: ~ > cat fichier
bla
tettgrt
dgfdfgd
dgdgg
spqsop
sogal 21:40:39: ~ > head -n 2 fichier
bla
tettgrt
sogal 21:40:46: ~ > head -n 2 fichier | tail -n 1
tettgrt
 


wink


Machine perso : Thinkpad x230 Debian Stretch | Machine pro : Thinpad T450 openSUSE Leap 42.2

Hors ligne

#4 28-07-2015 00:48:33

MrCHACHA
Membre
Distrib. : Debian8 jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : KDE 4.14.2
Inscription : 03-12-2014

Re : [Résolu] Récupérer la ligne x d'un fichier

smile

- By Learning, doing and showing........
- "L'utopie ne signifie pas l'irréalisable, mais l'irréalisée."

Hors ligne

#5 03-08-2015 19:38:27

durn1818
Membre
Distrib. : Debian Jessy
Noyau : Linux 3.16.0-4-amd64
Inscription : 27-07-2015

Re : [Résolu] Récupérer la ligne x d'un fichier

Merci. Si je fais head -n 2 fichier | tail -n 1, j'obtiens bien à l'écran la deuxième ligne de fichier. Mais je souhaiterais récupérer la ligne x en tant que variable (chaîne de caractères). Comment faire ? Par exemple, le code suivant ne marche évidemment pas (où l'on imagine qu'il existe déjà un fichier appelé "fichier" contenant au moins dix lignes).

#!/bin/bash
for i in `seq 1 10` ;
do
        name=head -$i fichier | tail -1
        echo $name
done
 



J'ai essayé avec des redirections mais ça ne marche pas non plus... J'aimerais pouvoir le corriger. Merci à vous !

Hors ligne

#6 03-08-2015 21:38:51

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [Résolu] Récupérer la ligne x d'un fichier

Plop,


Pour n'afficher que la $x ème ligne :

sed -n "${x}p" "$fichier"




Par exemple, pour la 3e ligne :

sed -n "3p" "$fichier"




Et pour l'avoir dans une variable :

MAVAR=$(sed -n "${x}p" "$fichier")


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#7 03-08-2015 21:42:54

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [Résolu] Récupérer la ligne x d'un fichier

Une version corrigée de ton code :

#!/bin/sh
for i in $(seq 1 10) ;
do
        name=$(head -$i fichier | tail -1)
        echo $name
done



La même chose avec sed :

#!/bin/sh
for i in $(seq 1 10) ;
do
        name=$(sed -n "${i}p" fichier)
        echo $name
done


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#8 04-08-2015 09:41:30

durn1818
Membre
Distrib. : Debian Jessy
Noyau : Linux 3.16.0-4-amd64
Inscription : 27-07-2015

Re : [Résolu] Récupérer la ligne x d'un fichier

Super, c'est exactement ça que je cherchais ! Juste une chose. Pourquoi mettre un ";" après "for i in $(seq 1 10)" ?
Merci encore à tous !

Hors ligne

#9 04-08-2015 09:58:02

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : [Résolu] Récupérer la ligne x d'un fichier

le point virgule fini la création de la variable et passe à la commande qui l'utilise.
Le done termine l'utilisation de cette variable.
Cela s'appelle une boucle.
Si tu avais plusieurs commande à faire avec cette variable, il te faudrait terminer chacune par un point-virgule avant de passer au done final.

Dans le wiki df (Documentation dans le bandeau), nous avons un totu tout prêt pour étudier les scripts bash :
Le bash commence ici et fini où tu...  t'arrêtes ! big_smile

Dernière modification par smolski (04-08-2015 09:59:50)


"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

#10 04-08-2015 12:37:14

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu] Récupérer la ligne x d'un fichier

Pour juste récupérer la ligne de numéro x, j'utilise sed qui assez pratique pour cela :


sed -n xp fichier
 


Ou pour un très long fichier :


sed -n 'xp;xq' fichier
 


p est la commande sed qui lui d'afficher la ligne en cours de traitement, q est la commande qui permet
de terminer le script sed.

Dernière modification par enicar (04-08-2015 12:39:59)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#11 04-08-2015 13:55:57

durn1818
Membre
Distrib. : Debian Jessy
Noyau : Linux 3.16.0-4-amd64
Inscription : 27-07-2015

Re : [Résolu] Récupérer la ligne x d'un fichier

Merci enicar !
@smolsky : oui, je crois que de moi-même, j'avais mis un ; mais il me semblait avoir lu quelque part que si l'on allait à la ligne, il n'y avait pas besoin de mettre un ";" ?

PS. Efectivement, le tuto shell de df est très bien fait...

Hors ligne

#12 05-08-2015 16:17:28

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [Résolu] Récupérer la ligne x d'un fichier

@durn1818: dans l'exemple, le ; n'est pas nécessaire.

En fait, quand tu fais une boucle for, « for i in bla bli blo… », ce qui indique que la liste « bla bli blo… » est terminée, c'est soit un ;, soit un retour à la ligne.
Exemple :

for i in $(seq 10); do echo $i; done


Qui est équivalent à

for i in $(seq 10)
do
  echo $i
done


Les ; permettent de lever l’ambiguïté syntaxique, et d'ainsi chaîner les commandes sur une même ligne.


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#13 05-08-2015 16:30:09

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : [Résolu] Récupérer la ligne x d'un fichier

/me se tait mais n'en pense pas moins... smile

"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

Pied de page des forums