Manipulation tableau shell script

Résolu
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. Contributeur
    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 ;-\

    1. 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
      1. Contributeur
        C'est clair que c'est beaucoup plus clair vu comme ça ;-))

        Par contre ça risque d'être plus complexe à mettre en oeuvre ;-(
      2. Contributeur
        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 ;-(
    2. 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
      1. Contributeur
        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
        
        $

        ;-))
        1. 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
          1. Contributeur
            Par contre le bc ne passe pas:
            Peut être n'est-elle pas installée...

            Quel système ? Quelle distrib ?
        2. elle n'est pas installée, il faut que je trouve autre chose
          je suis sur du redhat
          1. Contributeur
            Ça m'étonne que bc ne soit pas dans les paquets de RedHat ;-\

            et "dc" ?
        3. Contributeur
          Essaye avec ça :

          $ while read A; do printf "%d\n" "0X$(sed 's/\(..\)\(..\)\(.*\)/\2\1/' <<<$A)"  ;done < tables.txt
          1
          2
          772
          183
          1. 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
          2. 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
            1. Contributeur
              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 ?
          3. 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