Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/07/2013, à 20:30

totycos

[Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

Bonsoir à tous,

Je souhaite écrire une ligne de commande qui affiche un ls -l une ligne sur deux, à partir de la première.

Quelqu'un aurait il une idée ?^^

Merci !

Dernière modification par totycos (Le 20/07/2013, à 15:16)

Hors ligne

#2 Le 19/07/2013, à 20:58

aglesia

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

Bonsoir, je ne comprend pas ta question... hmm Là, je dirais : tapes ta commande, puis tapes "ls -l", puis tapes une autre commande... roll


L'erreur est humaine...
Si votre PC plante, c'est qu'il est humain :D

Hors ligne

#3 Le 19/07/2013, à 21:22

ssdg

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

Je pense qu'il veut dire quelque chose comme:
configurer son prompt/bricoler un interpreteur


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#4 Le 19/07/2013, à 21:25

pingouinux

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

Bonsoir,
Ceci devrait faire l'affaire :

awk '!(NR%2){print}' < <(ls -l)

Dernière modification par pingouinux (Le 19/07/2013, à 21:26)

Hors ligne

#5 Le 19/07/2013, à 22:20

totycos

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

Bonsoir à vous,

Ma question est tirée d'un exercice, la consigne n'est pas très claire je vous l'accorde.
Je pense qu'il faut lancer un ls -l et faire en sorte que les résultats soient affichés une ligne sur deux.

Re pigouinux,

Tu m'aides dans tous mes exercices ^^
Je ne comprends pas ta commande et n'arrive pas à la faire fonctionner, sache que ça ne fait que 4 jours que j'ai commencé à me pencher sur ubuntu, le shell et tout ce qui va avec.


Merci pour vos réponses en tout cas

Hors ligne

#6 Le 20/07/2013, à 08:37

pingouinux

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

Peux-tu faire un copier-coller de la commande que tu lances et du message d'erreur éventuel ? Tu peux aussi essayer ceci :

ls -l | awk '!(NR%2){print}'

NR : numéro de la ligne
NR%2 : reste de la division par 2 (0 si ligne paire, 1 si ligne impaire)
'!(NR%2){print}' : impression des lignes paires (il faut sauter la première qui est : total nn)

Hors ligne

#7 Le 20/07/2013, à 14:44

totycos

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

Merci pingouinux !

Enfaîte l'autre commande marchait très bien aussi, c'est moi même qui ne comprenais pas la consigne...
Tes explications m'ont éclairé, il reste cependant le "!" que je ne comprends pas dans la commande. A quoi sert-il ?

Penses tu qu'il est possible de faire la même chose avec sed ?

Hors ligne

#8 Le 20/07/2013, à 14:50

totycos

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

Et pourquoi la 1er ligne du total n'est elle pas affichée ?

Hors ligne

#9 Le 21/07/2013, à 20:09

pingouinux

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

totycos   #7 a écrit :

il reste cependant le "!" que je ne comprends

! est l'opérateur not (négation)
NR%2 =0 (faux) si NR pair
           =1 (vrai) si NR impair
!(NR%2) : faux si NR impair
               :  vrai si NR pair

totycos   #8 a écrit :

Et pourquoi la 1er ligne du total n'est elle pas affichée ?

NR=1 pour la première ligne, !(NR%2) est faux, et la ligne n'est pas imprimée

C'est possible aussi avec sed, mais beaucoup moins simple, et il faudrait que je me creuse la tête…:)

Hors ligne

#10 Le 21/07/2013, à 20:35

totycos

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

Merci, tout est très clair maintenant ^^

Hors ligne

#11 Le 21/07/2013, à 21:36

pingouinux

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

Avec sed, après quelques tâtonnements, c'est même plus simple :

sed -n 'n;p' < <(ls -l)

Dernière modification par pingouinux (Le 21/07/2013, à 21:37)

Hors ligne

#12 Le 21/07/2013, à 22:25

totycos

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

Super ^^

Peux tu m'expliquer son fonctionnement comme pour awk s'il te plaît, j'ai du mal à comprendre les explications du man pour ces 2 commandes.

Merci !

Hors ligne

#13 Le 22/07/2013, à 07:41

pingouinux

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

sed -n 'n;p'

sed lit les lignes du fichier une par une, et les stocke dans le "pattern space"
-n : Pas d'impression automatique du "pattern space" (habituellement, c'est la ligne en cours)
n : Le "pattern space" est remplacé par la ligne suivante
p : Impression du "pattern space"
et ainsi de suite.

Hors ligne

#14 Le 22/07/2013, à 09:21

totycos

Re : [Résolu] Ligne de commande qui affiche un ls -l une ligne sur deux

Encore une fois merci pour ton aide  !
Tes explications sont toujours trѐs claires.

À un prochain problѐme !

Hors ligne