Executer une commande venant d'un fichier de données

delfel Messages postés 4 Statut Membre -  
 delfel -
Bonjour,

je vous expose mon problème, déjà je suis débutante en shell

j'ai un fichier de données de plusieurs lignes, chaque lignes a elle même plusieurs données, dont une donnée date (variable), et pour éviter de devoir toucher a ce fichier j'ai inscrit les dates de cette façon exemple: date +%d/%m/%Y

mon shell récupère toutes les données mais lorsque je récupère mon champs date il me le laisse en forme du fichier de donnée,

je ne sais pas comment faire en sorte qui prenne un format JJ/MM/AAAA lors de la recirculation de l'information

si vous avez une piste qui pourrais m'aider

merci

7 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    $ awk 'BEGIN {OFS=FS=";"} {$3 | getline $3; print}' fichier
    1 2 4 5 ;TRAITEMENT;241013;TRAITEMENT.our;TRAITEMENT.err;
    1 3 4 5 ;TRAITEMENT2;2013;TRAITEMENT2.out;TRAITEMENT2.err;
    $
    $ awk 'BEGIN {OFS=FS=";"} {$3 | getline $3; printf "NOM: %s\nPARA: %s\nSORTIE: %s\nERREUR: %s\n",$2, $3, $4, $5}' fichier
    NOM: TRAITEMENT
    PARA: 241013
    SORTIE: TRAITEMENT.our
    ERREUR: TRAITEMENT.err
    NOM: TRAITEMENT2
    PARA: 2013
    SORTIE: TRAITEMENT2.out
    ERREUR: TRAITEMENT2.err
    $
    1
  2. Flachy Joe Messages postés 2303 Statut Membre 261
     
    Salut,
    c'est quelque chose comme ça que tu veux faire ?
    #!/bin/bash

    datas=("5 janvier 2014" "date +%d/%m/%Y" "03/11/2013")

    for current in "${datas[@]}"
    do
    if $(echo $current | grep %)
    then
    datas[$n]=$($current)
    fi
    n=$[$n+1]
    done

    echo "${datas[@]}"

    0
  3. delfel Messages postés 4 Statut Membre
     
    Bonjour Flachy Joe

    en faite mon fichier de données ressemble a ça (sachant que dans l'avenir on ne devra rien toucher de ce fichier)

    1 2 4 5 ;TRAITEMENT;date +%d%m%y;TRAITEMENT.our;TRAITEMENT.err;
    1 3 4 5 ;TRAITEMENT2;date +%Y;TRAITEMENT2.out;TRAITEMENT2.err;
    ........

    il fera environ 25 lignes avec 10 arguments chacune

    j'ai mon Shell qui me permet la récupération et la découpe des données pour faire un nouveau fichier de données qui lui ressemble a ça

    NOM : TRAITEMENT
    PARA : 24/10/2013
    SORTIE : TRAITEMENT.out
    ERREUR : TRAITEMENT.err

    actuellement je récupère le champs tel qu'il est dans mon fichier de donnée 1er, je sais pas comment je pourrais le convertir en date ou année

    chaque ligne peu avoir 1 paramètre ou plusieurs paramètre et pas forcement des dates

    merci
    0
  4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    $ cat plop
    1 2 4 5 ;TRAITEMENT;date +%d/%m/%y;TRAITEMENT.our;TRAITEMENT.err;
    1 3 4 5 ;TRAITEMENT2;date +%Y;TRAITEMENT2.out;TRAITEMENT2.err;
    1 4 4 5 ;TRAITEMENT2;;TRAITEMENT2.out;TRAITEMENT2.err;

    $ cat foo.sh
    #! /bin/bash

    while read line
    do
    var=$(grep -o 'date[^;]*' <<<${line})
    sed 's#date[^;]*#'"$(${var})"'#' <<<"${line}"
    done < plop

    $ ./foo.sh
    1 2 4 5 ;TRAITEMENT;24/10/13;TRAITEMENT.our;TRAITEMENT.err;
    1 3 4 5 ;TRAITEMENT2;2013;TRAITEMENT2.out;TRAITEMENT2.err;
    1 4 4 5 ;TRAITEMENT2;;TRAITEMENT2.out;TRAITEMENT2.err;

    $

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. delfel Messages postés 4 Statut Membre
     
    merci beaucoup
    je vais tester dans la journée
    mais encore merci
    0
  7. delfel Messages postés 4 Statut Membre
     
    ça fonctionne super bien quant j'ai qu'un date par ligne mais pas quant j'en ai 2
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      montre un exemple de donnée avec 2 date
      0
  8. delfel
     
    c'est ok
    j'ai trouver un palliatif ^^

    je nome mon second date en jour, je le modifie après le premier passage de la commande que ma transmit ziper 31 et la relance une seconde fois

    je sais c'est pas très propre mais ça fonctionne

    merci de votre aide
    0