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. 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
    1. 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 ?
    2. 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
    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. 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" ?
      2. 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 ?
      3. 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. 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. 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. 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 ;-\