Manipulation tableau shell script

[Résolu/Fermé]
Signaler
Messages postés
6
Date d'inscription
mardi 29 mars 2011
Statut
Membre
Dernière intervention
13 février 2014
-
 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

Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 434
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 ;-\

Messages postés
6
Date d'inscription
mardi 29 mars 2011
Statut
Membre
Dernière intervention
13 février 2014

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
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 434
C'est clair que c'est beaucoup plus clair vu comme ça ;-))

Par contre ça risque d'être plus complexe à mettre en oeuvre ;-(
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 434
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 ;-(
Messages postés
6
Date d'inscription
mardi 29 mars 2011
Statut
Membre
Dernière intervention
13 février 2014

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
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 434
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

$

;-))
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
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 434
Par contre le bc ne passe pas:
Peut être n'est-elle pas installée...

Quel système ? Quelle distrib ?
elle n'est pas installée, il faut que je trouve autre chose
je suis sur du redhat
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 434
Ça m'étonne que bc ne soit pas dans les paquets de RedHat ;-\

et "dc" ?
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 434
Essaye avec ça :

$ while read A; do printf "%d\n" "0X$(sed 's/\(..\)\(..\)\(.*\)/\2\1/' <<<$A)"  ;done < tables.txt
1
2
772
183
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
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 434
As-tu vu mon précédent message ?
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
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 434
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 ?
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