Manipulation tableau shell script

Résolu
manu_ch44 Messages postés 8 Statut Membre -  
 manu-ch44 -
Bonjour,

J'ai 2 fichiers table.txt et nom_des_tables.txt dans lesquel j'ai les valeurs suivantes:
table.txt (table_id, nbre de personnes)
0100 1
0200 52
0403 60
B700 120

nom_des_tables.txt (table_id, nom de la table)
1 TABLE DU CHEF
2 MOUSSE
183 MAURICE
772 JOHN

Dans la première table il faut manipuler la premier colonnes qui est en Bytes Reverses.
0100 => 0001
0200 => 0002
0403 => 0304
B700 => 00B7

Je voudrais créer un fichier shell qui me permet de sortir le nombre de personnes qu'il y a par table:
c'est à dire:
TABLE DU CHEF 1
MOUSSE 2
MAURICE 60
JOHN 120

Merci beaucoup pour votre aide

10 réponses

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

    Y'a un truc qui m'échappe dans tes tables, c'est la correspondances entre les "table_id" ;-((

    1 TABLE DU CHEF 0100 1
    2 MOUSSE        0200 52
    183 MAURICE     0403 60
    772 JOHN        B700 120

    Autant les 2 premières ça correspond, autant les 2 autres je ne vois pas ;-\

    0
  2. manu_ch44 Messages postés 8 Statut Membre
     
    Salut,

    Tout d'abord merci pour la réactivité, je reformule:
    Les 2 premières tables ce sont les fichiers de départs :
    table.txt (table_id en bytes reverse et en hexa, nbre de personnes)
    et
    nom_des_tables.txt (table_id en décimale, nom de la table) , .

    Ensuite mon programme manipule la première colonne de table.txt afin d'avoir:
    0100 => H'0001 = 1
    0200 => H'0002 = 2
    0403 => H'0304 = 772
    B700 => H'00B7 = 183

    Enfin il fait la correspondance entre le nom_des_tables.txt (table_id, nom de la table) et table.txt après la manipulation

    le dernier tableau que je veux obtenir c'est :
    TABLE DU CHEF 1
    MOUSSE 52
    MAURICE 60
    JOHN 120

    Dis-moi si c'est mieux.

    Merci
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      C'est clair que c'est beaucoup plus clair vu comme ça ;-))

      Par contre ça risque d'être plus complexe à mettre en oeuvre ;-(
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Juste un truc... je suppose qu'en réalité les fichiers ne sont pas triés comme dans ton exemple et qu'il faut réellement chercher une correspondance entre les table_id ?

      En shell pur ça risque d'être un lourd comme traitement ;-(
      0
  3. manu_ch44 Messages postés 8 Statut Membre
     
    j'affiche:
    0001
    0002
    0304
    00B7

    avec:
    au lieu de
    printf " ${table3col[n]}${table4col[n]}${table1col[n]}${table2col[n]} \n"

    quand je veux convertir en décimal, je mets:
    printf " %d \n" ${table3col[n]}${table4col[n]}${table1col[n]}${table2col[n]} $IPHEXA

    j'obtiens:
    1
    2
    error
    error

    une idée ?
    Merci
    0
  4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Si ça peut t'avancer, pour la conversion j'ai ça :

    $ cat tables.txt
    0100 1
    0200 52
    0403 60
    B700 120
    
    $ while read A; do echo "ibase=16;$(sed 's/\(..\)\(..\)\(.*\)/\2\1/' <<<$A)" | bc ;done < tables.txt
    1
    2
    772
    183
    
    $

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

    Posez votre question
  6. manu-ch44
     
    Merci pour cette commande.
    Par contre le bc ne passe pas:
    -bash: bc: command not found
    -bash: echo: write error: Broken pipe
    -bash: bc: command not found
    -bash: echo: write error: Broken pipe
    -bash: bc: command not found
    -bash: echo: write error: Broken pipe
    -bash: bc: command not found

    quand je supprime "| bc"
    j'ai bien les valeurs
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Par contre le bc ne passe pas:
      Peut être n'est-elle pas installée...

      Quel système ? Quelle distrib ?
      0
  7. manu-ch44
     
    elle n'est pas installée, il faut que je trouve autre chose
    je suis sur du redhat
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Ça m'étonne que bc ne soit pas dans les paquets de RedHat ;-\

      et "dc" ?
      0
  8. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Essaye avec ça :

    $ while read A; do printf "%d\n" "0X$(sed 's/\(..\)\(..\)\(.*\)/\2\1/' <<<$A)"  ;done < tables.txt
    1
    2
    772
    183
    0
  9. manu-ch44
     
    quand je tape bc ou dc
    j'obtiens:
    # dc
    -bash: dc: command not found
    #bc
    -bash: bc: command not found

    En fait je peux récupérer le table_id en hexa dans le fichier nom_des_tables.txt.
    Ca me fait:
    1 TABLE DU CHEF
    2 MOUSSE
    B7 MAURICE
    304 JOHN

    Ainsi je m'affranchis de la conversion.

    Je continue ......
    Merci
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      As-tu vu mon précédent message ?
      0
  10. manu-ch44
     
    Non désolé,
    Ta commande fonctionne

    C'est bon , trop bon !

    Je continue, tu déjà m'as enlevé une belle épine du pied.

    Merci beaucoup
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Cool Raoul ;-)

      Par contre je réitère ma question :

      je suppose qu'en réalité les fichiers ne sont pas triés comme dans ton exemple et qu'il faut réellement chercher une correspondance entre les table_id ?
      0
  11. manu-ch44
     
    Bonjour,
    Ca y est j'ai fini.

    Il faut effectivement trouver une correspondance entre les table_id.
    Pour cela j'ai une boucle dans une boucle:
    for p in $(seq $o)
    do
    for n in $(seq $m)
    do
    if test ${table1biscol[p]} == ${table3col[n]}
    then
    printf "personne a la table for ${table4col[n]} : ${table2col[p]}\n"
    fi
    done
    done

    Merci Beaucoup pour ton aide
    0