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
manu-ch44 - 30 mars 2011 à 15:05
A voir également:
- Manipulation tableau shell script
- Tableau croisé dynamique - Guide
- Script vidéo youtube - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
10 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
29 mars 2011 à 11:18
29 mars 2011 à 11:18
Salut,
Y'a un truc qui m'échappe dans tes tables, c'est la correspondances entre les "table_id" ;-((
Autant les 2 premières ça correspond, autant les 2 autres je ne vois pas ;-\
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 ;-\
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
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
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
29 mars 2011 à 13:26
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 ;-(
Par contre ça risque d'être plus complexe à mettre en oeuvre ;-(
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
29 mars 2011 à 16:41
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 ;-(
En shell pur ça risque d'être un lourd comme traitement ;-(
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
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
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
29 mars 2011 à 19:02
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 $
;-))
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
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
30 mars 2011 à 10:08
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 ?
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
je suis sur du redhat
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
Modifié par zipe31 le 30/03/2011 à 10:18
Modifié par zipe31 le 30/03/2011 à 10:18
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
30 mars 2011 à 10:40
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
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
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
30 mars 2011 à 11:12
30 mars 2011 à 11:12
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
Ta commande fonctionne
C'est bon , trop bon !
Je continue, tu déjà m'as enlevé une belle épine du pied.
Merci beaucoup
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
30 mars 2011 à 11:42
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 ?
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
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