logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

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 20: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 12:09:38)

Hors ligne

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

MrCHACHA
Membre
Distrib. : Debian 9.1 stretch
Noyau : Linux 4.9.0-3-amd64
(G)UI : KDE 5.28.0
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........
- "If there is a will, there is a way."

Hors ligne

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

sogal
Black Metal Modo
Lieu : Nord Isère
Distrib. : openSUSE Leap 42.3
Noyau : Linux 4.4.76
(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


1485418338.png Hello IT ! Have you tried turning it off and on again ?

Hors ligne

#4 27-07-2015 23:48:33

MrCHACHA
Membre
Distrib. : Debian 9.1 stretch
Noyau : Linux 4.9.0-3-amd64
(G)UI : KDE 5.28.0
Inscription : 03-12-2014

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

smile

- By Learning, doing and showing........
- "If there is a will, there is a way."

Hors ligne

#5 03-08-2015 18: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 20:38:51

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
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 20:42:54

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
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 08: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 08:58:02

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
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 08:59:50)


saque eud dun (patois chtimi : fonce dedans)

Hors ligne

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

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(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 11:39:59)

Hors ligne

#11 04-08-2015 12: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 15:17:28

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
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 15:30:09

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
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

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

Pied de page des forums