Recuperer colone ds fichier pr mem nbr lignes

val12212 -  
 val12212 -
Bonjour,

Je cherche à recupérer une colone dans un fichier composé de deux colones. Afin de mettre un nombre de ligne definit selon l'intervalle qu'il y a entre chaque valeur.

Explication: Après avoir crée un fichier de 2000 valeur avec deux colonnes, la premiere étant le temps en seconde, la deuxieme une valeur. Chaque temps est un multiple de 1200 sec mais lorsqu'il n'y a pas de valeur la ligne n'est pas crée et donc l'intervalle s'agrandit.

Je cherche donc a récupérer la colonne 1, m'assurer qu'il y a 1200 d'intervalle entre chaque valeur et si NON, alors mettre la valeur du temps ds la colonne 1 (Espacé de 1200) et 0 dans la colonne 2.

J'ai déjà trouvé des pistes sur ce poste (http://www.commentcamarche.net/... mais étant débutant, j'ai du mal a l'utiliser pour mon cas.

Je passerai l'après midi la dessus !

Si vous avez des idées pr éclairer mon chemin, je suis preneur !

Merci a vous.

5 réponses

  1. val12212
     
    Cest comme cela que ca aurez du apparaitre :

    values_Avant

    1262304000 5000
    1262305200 5500
    1262306400 5200
    1262308800 6000

    Values_Apres

    1262304000 5000
    1262305200 5500
    1262306400 5200
    1262307600 0
    1262308800 6000
    1
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Ça doit être faisable avec "awk" ou "perl", mais là ce n'est pas ma tasse de thé ;-(

      Il faudrait que "dubcek" (grand spécialiste en awk) ou lami20j (grand spécialiste en perl) passent par là ;-))
      0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Je reste persuadé qu'avec awk ou perl ça doit être beaucoup plus simple...

    En attendant :
    $ cat foo.sh
    #! /bin/bash
    
    #set -xv
    
    sed -n '1p' plop > fich
    COMPT=$(awk 'NR == 1 { print $1 }' plop)
    
    while read line
    do
    REF=$(awk 'NR == 1 { print $1 }' <<<${line})
    COMPT=$((COMPT + 1200))
    if [[ ${REF} = ${COMPT} ]]
    then
    echo "${line}" >> fich
    else
    echo -e "${COMPT} 0\n${line}" >> fich
    fi
    done < <(sed '1d' plop)
    
    $ cat plop
    1262304000 5000
    1262305200 5500
    1262306400 5200
    1262308800 6000
    
    $ ./foo.sh
    
    $ cat fich
    1262304000 5000
    1262305200 5500
    1262306400 5200
    1262307600 0
    1262308800 6000
    
    $

    ;-))
    1
  3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Les nouvelles restrictions du forum empêchent les anonymes de poster des url cliquables (y compris les url internes ce qui est une aberration complète), et de ce fait ton exemple manque de consistance ;-((

    Peux-tu néanmoins poster un exemple concret de ton problème du style
    avant => après

    Merci ;-)
    0
  4. val12212
     
    Daccord, désolé ! Je ne le savais pas.

    Pour un exemple plus concret et imagé contre ce blabla, voici mon fichier de depart.

    values_Avant Values_Apres

    1262304000 5000 1262304000 5000
    1262305200 5500 1262305200 5500
    1262306400 5200 1262306400 5200
    1262308800 6000 1262307600 0
    1262308800 6000

    Il manquait un interval entre la 3eme et 4eme ligne. Dans le fichier apres, l'interval est rajouté et une valeur nul est mise dans la deuxieme colone. J'utilise actualement un autre language pour faire cela mais jaimerai inclure la fonction dans mon script pr eviter les manipulations suplémentaires.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. val12212
     
    Yeah zipe 31 ! Merci, tu me fais gagner du temps et aprendre des choses ! Jessaye ca tt de suite !

    Thanxs again !!!
    0