IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Concaténer un nombre variable de lignes


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut Concaténer un nombre variable de lignes
    Bonsoir, j'exécte cette commande pour lister les fichiers qui ont été crée durant les derniers 7 jours dans mon répértoire du mois courrant (ici juin)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     find /root/Jflow/juin -mindepth 1 -mtime -7 -type d | sort -k 1n | find /root/Jflow/juin -mindepth 1 -mtime -7 -type d | sort -k 1n | cut -d "/" -f5
    lé résultat retourné esr ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    18-06-2013
    21-06-2013
    21-06-2013
    25-06-2013
    je voudrais concéténer lles lignes retournée sans passer par une boucle while car le nombre de lignes retourné est variable (de 0 à 7). je souhaite avoir ce résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    18-06-2013:21-06-2013:24-06-2013:25-06-2013
    merci de votre aide

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 311
    Points : 12 830
    Points
    12 830
    Par défaut
    Bonjour,

    Exemple à coupler sur ta commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ cat vv
    18-06-2013
    21-06-2013
    21-06-2013
    25-06-2013
     
    $ cat vv | xargs echo | tr ' ' ':'
    18-06-2013:21-06-2013:21-06-2013:25-06-2013
    $

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 480
    Points
    19 480
    Par défaut
    Bonjour,

    est-ce une erreur de copie : il y a deux fois find | sort ?
    d'ailleurs, find ne prend pas d'arguments sur son entrée standard.
    en tous cas, je ne l'ai jamais observé.

    Citation Envoyé par supcomingenieur
    sans passer par une boucle while car le nombre de lignes retourné est variable (de 0 à 7)
    je ne vois pas d'incompatibilité

    en bash :
    Code non-testé : Sélectionner tout - Visualiser dans une fenêtre à part
    while read line; do var="${var:+:}$line"; done < <(find | sort)
    ...
    ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par supcomingenieur Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /root/Jflow/juin -mindepth 1 -mtime -7 -type d | sort -k 1n | cut -d "/" -f5
    Petite remarque: je n'aime pas beaucoup le cut -d "/" -f5 car si le répertoire de départ change de profondeur, le script n'est plus bon.

    S'il s'agit juste de récupérer le nom de fichier, je préfère utiliser ${xxx##*/} ou basename lorsque c'est possible, ou bien sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /root/Jflow/juin -mindepth 1 -mtime -7 -type d | sort -k 1n | sed -e 's|.*/||'

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 311
    Points : 12 830
    Points
    12 830
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Petite remarque: je n'aime pas beaucoup le cut -d "/" -f5 car si le répertoire de départ change de profondeur, le script n'est plus bon.

    S'il s'agit juste de récupérer le nom de fichier, je préfère utiliser ${xxx##*/} ou basename lorsque c'est possible, ou bien sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /root/Jflow/juin -mindepth 1 -mtime -7 -type d | sort -k 1n | sed -e 's|.*/||'
    Ou bien grep (si c'est possible )

    Ou mieux le paramètre -printf "%f\n" de find

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    je vous remercie pour votre aide. Tous ces scripts fonctionnent correctement.
    Merci

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    Bonjour,
    J'ai écrit un script qui permet de lancer le collecteur de flux nfdump et d'enregister les flux collecté dans le des répertoire ayant la form suivante:
    roo t/Jflow / mois courrant/ date courrante
    lorsque je lance le script manuellement tout fonctionne très bien car le script vérifie toujours au début de quel mois et de quel date il s'agit pour créer le fichier correspondant.
    le problème est que ce script va être installé sur un serveur et va donc tourner indéfiniment (sauf s'il est arrêté par l'administrateur du système). Je ne sais pas comment faire pour automatiser la tâche de vérification de la date pour qu'il crée le sous dossier "date courrante"
    lorsq'une journé s'écoule et pour qu'il créer le sous dossier mois courrant lorsqu'un mois s'écoule.

    je vous met le script avec lequel je travail actuellement (je le démarre chaque matin manuellement quand j'arrive à l'entreprise):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    # tester si les enregistrement ont atteint la durée de vie maximale (1 an)
     
    nb_records=$(find /root/Jflow -maxdepth 1 -mindepth 1 -type d | wc -l)
     
    if [ "$nb_records" == "12" ]
    then rm -fr /root/Jflow/*
    fi
     
    # récupérer le mois courrant
    current_month=$(date +%B)
     
    # récupérer la date courrante
    current_date=$(date +%d-%m-%Y) 
     
    # si un répertoire nommé après cette date existe alors lancer nfdump avec /root/Jflow/$current_month/$current_date comme 
    # répertoire cible
     
     
    if [ -d "/root/Jflow/$current_month/$current_date" ] 
    then nfcapd -D -p 2055 -l /root/Jflow/$current_month/$current_date
     
    # sinon créer le répertoire puis lancer nfdump
     
    else
    mkdir -p /root/Jflow/$current_month/$current_date
    nfcapd -D -p 2055 -l /root/Jflow/$current_month/$current_date 
    fi
    je vous remercie d'avance.

  8. #8
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Salut,

    Citation Envoyé par supcomingenieur
    je vous met le script avec lequel je travail actuellement (je le démarre chaque matin manuellement quand j'arrive à l'entreprise):
    Et cron il ne sert pas à ça des fois ?

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    Oui c'est vrai que j'ai entendu parler de ce utilitaire.
    Je vais me documenter et si je rencontre des problèmes je les posetrai.
    Merci pour la piste.

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    j'ai commencé par tester le programme crontab sur un script plus simple (autre que celui dont j'ai parlé dans mon message précédent) afin de tester le fonctionnement.
    J'ai réalisé les tâches suivantes:
    1- chmod +x monscript
    2- crontab -e --> choisir nano
    3- ajouter cette ligne: */1 * * * * mon _script

    mais le script n'est pas entrain de s'éxécuter la pruve est quand je le lance manuellement il y'a un fichier qui va être crée mais ce fichier n'est pas crée lorsque j'utilise crontab.

    comment régler ce problème?
    merci

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 480
    Points
    19 480
    Par défaut
    cron ne possède pas de répertoire courant, il faut donc indiquer le chemin complet des fichiers, et des exécutables dont le chemin ne figure pas dans le PATH de cron.

  12. #12
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    oui je sais, j'ai précisé le chemin complet /root/Desktop/mon_script mais aucun signe qu'il est entrain de tourner.
    J'ai regardé les syslog, mais ça n'indique pas d'erreur

  13. #13
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Salut,

    La première ligne de ton script est bien #!/bin/bash ou #!/bin/sh ?

  14. #14
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    ni l'une ni l'autre. Je n'ai jamais utilisé cette ligne dans mes scripts.
    Pourquoi elle est indisponsable?

  15. #15
    Invité
    Invité(e)
    Par défaut
    Cette ligne indique à ton script le shell qui doit être utilisé.

    Pour essayer de voir ce qu'il se passe,
    1) regarder dans les log cron si l'execution du script s'effectue bien.
    2) Si l'execution au point 1 est ok, Redirige l'output et l'erreur standard dans un fichier pour essayer de comprendre ce qu'il se passe.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    */1 * * * * /chemin/complet/mon _script > /chemin/complet/mon_script.log 2>&1

  16. #16
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    D'après ce que je vois, avec cron auf la première ligne du script est exécutée. Je m'explique:
    mon script de test comporte deux commandes mkdir dossier, sleep 15, rmdir dossier.
    Le dossier c'est claire, mais il n'est jamais effacé. je ne comprend pas pourquoi

  17. #17
    Invité
    Invité(e)
    Par défaut
    Fournis l'entiereté de ton script.

  18. #18
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    J'ai trouvé le problème, c'est le fait que j'ai oublié de préciser les arguments du scripts.
    La methode du renvoi des erreurs dans un fichier est très efficace merci.
    J'ai juste une question, si je ferme ma machine et que je la redemmare est ce que ceci le script sera lancé automatiquement ou non?

  19. #19
    Invité
    Invité(e)
    Par défaut
    Oui, il sera lancé automatiquement.

  20. #20
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    Je te remercie.
    Maintenant que le script de test s'excéute correctement j'aimerai appliquer cette procédure sur mon script final.

    Comme je l'ai dit au début, mon script final permet de lancer un outil dans un répertoire portant le non /juin/28-06-2013 (s'il est lancé aujourdh'hui), /juin/29-06-2013 ect...
    Comment le forcer à changer de repertoire chaque 24h puis chaque mois?

    merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Masquer ou afficher un nombre variable de lignes
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/07/2014, 21h46
  2. Réponses: 0
    Dernier message: 25/03/2013, 15h39
  3. [AC-2003] Comment concaténer un nombre variable de champs?
    Par Chris@Xerox dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 05/10/2010, 11h56
  4. [XL-2003] Insertion d'un nombre variable de lignes
    Par mout94 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/04/2010, 20h21
  5. Somme d'un nombre variable de lignes
    Par marc56 dans le forum Excel
    Réponses: 2
    Dernier message: 06/09/2008, 18h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo