Manipulation tableau shell script

Résolu/Fermé
manu_ch44 Messages postés 6 Date d'inscription mardi 29 mars 2011 Statut Membre Dernière intervention 13 février 2014 - 29 mars 2011 à 10:43
 manu-ch44 - 30 mars 2011 à 15:05
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
A voir également:

10 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
29 mars 2011 à 11:18
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
manu_ch44 Messages postés 6 Date d'inscription mardi 29 mars 2011 Statut Membre Dernière intervention 13 février 2014
29 mars 2011 à 11:35
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
29 mars 2011 à 13:26
C'est clair que c'est beaucoup plus clair vu comme ça ;-))

Par contre ça risque d'être plus complexe à mettre en oeuvre ;-(
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
29 mars 2011 à 16:41
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
manu_ch44 Messages postés 6 Date d'inscription mardi 29 mars 2011 Statut Membre Dernière intervention 13 février 2014
29 mars 2011 à 18:57
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
29 mars 2011 à 19:02
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
30 mars 2011 à 10:08
Par contre le bc ne passe pas:
Peut être n'est-elle pas installée...

Quel système ? Quelle distrib ?
0
elle n'est pas installée, il faut que je trouve autre chose
je suis sur du redhat
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
Modifié par zipe31 le 30/03/2011 à 10:18
Ça m'étonne que bc ne soit pas dans les paquets de RedHat ;-\

et "dc" ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
30 mars 2011 à 10:40
Essaye avec ça :

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