Je suis un peu d=E9butant en shell et en commandes unix, donc j'ai des
difficult=E9s et j'ai besoin d'aide :)
J'ai besoin de comparer de 2 fichiers en produisant un rapport de
comparaison respectant des r=E8gles strictes. Ce rapport de comparaison
sera exploit=E9 sous excel ou en html, je ne sais pas encore, le but
=E9tant d'en faire qq chose de visuel qui pr=E9sente les =E9carts.
(pour les gens press=E9s, la question est en bas, ce qui suit plante le
d=E9cor...)
Hypoth=E8ses :
H1 - mes deux fichiers F1 et F2 peuvent avoir un nb de lignes
diff=E9rents
H2 - chaque ligne comporte toujours le meme nombre de mots
H3 - les mots 3, 2, et 6 constituent une cl=E9 de tri (non unique) et de
comparaison pour identifier les lignes de F1 et F2 qui sont en
correspondance
H4 - pour deux lignes de F1 et F2 ayant la m=EAme cl=E9 (voir H3), les
mots 1, 4, 5, 7 sont des crit=E8res de comparaison n=E9cessaires et
suffisants pour affirmer que les 2 lignes sont identiques
H5 - les mots 8, 9, 10 ne doivent pas entrer en consid=E9ration dans la
comparaison des lignes, mais doivent appara=EEtre dans le rapport final
H6 - les fichiers peuvent =EAtre plut=F4t gros : 10000 lignes, quelques
Mo...
J'explique mon besoin.
Je veux obtenir un rapport d'=E9carts entre F1 et F2, qui respecte le
cahier des charges suivant :
B1 - le rapport doit pr=E9senter chaque paire de lignes de F1 et F2 dont
la cl=E9 est identique, mais dont un ou plusieurs mots =E0 comparer sont
diff=E9rents. =3D> on parle de "ligne en =E9cart"
B2 - si une cl=E9 de F1 se retrouve plusieurs fois dans F2, alors les
lignes suppl=E9mentaires de F2 sont consid=E9r=E9es comme des "nouvelles
lignes".
B3 - inversement, si une cl=E9 de F2 se retrouve plusieurs fois dans F1,
alors les lignes suppl=E9mentaires de F1 sont consid=E9r=E9es comme des
"lignes supprim=E9es"
B4 - si une ligne de F1 voit sa cl=E9 sans correspondance dans F2, c'est
une "ligne supprim=E9e"
B5 - inversement, si une ligne de F2 voit sa cl=E9 sans correspondance
dans F1, c'est une "nouvelle ligne"
B6 - Pour chacune des lignes identifi=E9es par les r=E8gles B1 =E0 B5, le
rapport doit ressortir la ligne du ou des fichiers concern=E9s,
pr=E9fix=E9e par le nom du fichier et l'information "nouvelle ligne" ou
"ligne supprim=E9e" ou "ligne en =E9cart". Pour les "lignes en =E9cart",
les mots qui sont diff=E9rents doivent =EAtre mis en =E9vidence
Voici o=F9 j'en suis :
J'ai fait un script qui fonctionne tr=E8s bien en bash, mais :
- j'ai peur que sur de gros fichiers le shell ne soit pas une bonne
option (pb de perf ?)
- mon script utilise des "exec 3<$fichier1" puis "read -u 3 -a tableau"
pour lire les lignes de chaque fichier, mais le script est destin=E9 =E0
tourner dans un environnement o=F9 je ne sais pas si le fd n=B03 sera
libre.
Voici ma question :
Comment obtenir un num=E9ro de file descriptor "libre" afin d'=E9viter de
devoir sp=E9cifier un num=E9ro "en dur" dans la commande "exec
3<$fichier1" ?=20
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Stephane Chazelas
On 28 Oct 2005 08:44:10 -0700, wrote: [...]
Comment obtenir un numéro de file descriptor "libre" afin d'éviter de devoir spécifier un numéro "en dur" dans la commande "exec 3<$fichier1" ? [...]
S'il n'est pas libre, le shell le fermera avant, ca ne devrait pas poser de probleme a moins que ton script ne lance une commande qui attend a trouver quelque chose de particulier sur son fd 3.
Pourquoi ne pas utiliser awk pour ton probleme?
-- Stephane
On 28 Oct 2005 08:44:10 -0700, tittom@free.fr wrote:
[...]
Comment obtenir un numéro de file descriptor "libre" afin d'éviter de
devoir spécifier un numéro "en dur" dans la commande "exec
3<$fichier1" ?
[...]
S'il n'est pas libre, le shell le fermera avant, ca ne devrait
pas poser de probleme a moins que ton script ne lance une
commande qui attend a trouver quelque chose de particulier sur
son fd 3.
Comment obtenir un numéro de file descriptor "libre" afin d'éviter de devoir spécifier un numéro "en dur" dans la commande "exec 3<$fichier1" ? [...]
S'il n'est pas libre, le shell le fermera avant, ca ne devrait pas poser de probleme a moins que ton script ne lance une commande qui attend a trouver quelque chose de particulier sur son fd 3.
Pourquoi ne pas utiliser awk pour ton probleme?
-- Stephane
Damien GUERIN
Il existe déjà un shell qui fait une comparaison de fichier et générant en option soit un fichier texte rapport, soit un fichier HTML rapport, etc... Il marche très bien, je l'utilise à mon boulot. Le hic c'est qu'étant le WE, impossible pour moi de te filer son nom. Si Jeudi tu n'as pas eu de nouvelles envoi moi un mail je te donnerai son nom (et oui, je reviens tard de WE ;) )
A+
a écrit dans le message de news:
Bonjour,
Je suis un peu débutant en shell et en commandes unix, donc j'ai des difficultés et j'ai besoin d'aide :)
J'ai besoin de comparer de 2 fichiers en produisant un rapport de comparaison respectant des règles strictes. Ce rapport de comparaison sera exploité sous excel ou en html, je ne sais pas encore, le but étant d'en faire qq chose de visuel qui présente les écarts.
(pour les gens pressés, la question est en bas, ce qui suit plante le décor...)
Hypothèses : H1 - mes deux fichiers F1 et F2 peuvent avoir un nb de lignes différents H2 - chaque ligne comporte toujours le meme nombre de mots H3 - les mots 3, 2, et 6 constituent une clé de tri (non unique) et de comparaison pour identifier les lignes de F1 et F2 qui sont en correspondance H4 - pour deux lignes de F1 et F2 ayant la même clé (voir H3), les mots 1, 4, 5, 7 sont des critères de comparaison nécessaires et suffisants pour affirmer que les 2 lignes sont identiques H5 - les mots 8, 9, 10 ne doivent pas entrer en considération dans la comparaison des lignes, mais doivent apparaître dans le rapport final H6 - les fichiers peuvent être plutôt gros : 10000 lignes, quelques Mo...
J'explique mon besoin. Je veux obtenir un rapport d'écarts entre F1 et F2, qui respecte le cahier des charges suivant : B1 - le rapport doit présenter chaque paire de lignes de F1 et F2 dont la clé est identique, mais dont un ou plusieurs mots à comparer sont différents. => on parle de "ligne en écart" B2 - si une clé de F1 se retrouve plusieurs fois dans F2, alors les lignes supplémentaires de F2 sont considérées comme des "nouvelles lignes". B3 - inversement, si une clé de F2 se retrouve plusieurs fois dans F1, alors les lignes supplémentaires de F1 sont considérées comme des "lignes supprimées" B4 - si une ligne de F1 voit sa clé sans correspondance dans F2, c'est une "ligne supprimée" B5 - inversement, si une ligne de F2 voit sa clé sans correspondance dans F1, c'est une "nouvelle ligne" B6 - Pour chacune des lignes identifiées par les règles B1 à B5, le rapport doit ressortir la ligne du ou des fichiers concernés, préfixée par le nom du fichier et l'information "nouvelle ligne" ou "ligne supprimée" ou "ligne en écart". Pour les "lignes en écart", les mots qui sont différents doivent être mis en évidence
Voici où j'en suis : J'ai fait un script qui fonctionne très bien en bash, mais : - j'ai peur que sur de gros fichiers le shell ne soit pas une bonne option (pb de perf ?) - mon script utilise des "exec 3<$fichier1" puis "read -u 3 -a tableau" pour lire les lignes de chaque fichier, mais le script est destiné à tourner dans un environnement où je ne sais pas si le fd n°3 sera libre.
Voici ma question : Comment obtenir un numéro de file descriptor "libre" afin d'éviter de devoir spécifier un numéro "en dur" dans la commande "exec 3<$fichier1" ?
Merci pour votre aide :)
Il existe déjà un shell qui fait une comparaison de fichier et générant en
option soit un fichier texte rapport, soit un fichier HTML rapport, etc...
Il marche très bien, je l'utilise à mon boulot. Le hic c'est qu'étant le WE,
impossible pour moi de te filer son nom. Si Jeudi tu n'as pas eu de
nouvelles envoi moi un mail je te donnerai son nom (et oui, je reviens tard
de WE ;) )
A+
<tittom@free.fr> a écrit dans le message de news:
1130514250.401963.324100@g44g2000cwa.googlegroups.com...
Bonjour,
Je suis un peu débutant en shell et en commandes unix, donc j'ai des
difficultés et j'ai besoin d'aide :)
J'ai besoin de comparer de 2 fichiers en produisant un rapport de
comparaison respectant des règles strictes. Ce rapport de comparaison
sera exploité sous excel ou en html, je ne sais pas encore, le but
étant d'en faire qq chose de visuel qui présente les écarts.
(pour les gens pressés, la question est en bas, ce qui suit plante le
décor...)
Hypothèses :
H1 - mes deux fichiers F1 et F2 peuvent avoir un nb de lignes
différents
H2 - chaque ligne comporte toujours le meme nombre de mots
H3 - les mots 3, 2, et 6 constituent une clé de tri (non unique) et de
comparaison pour identifier les lignes de F1 et F2 qui sont en
correspondance
H4 - pour deux lignes de F1 et F2 ayant la même clé (voir H3), les
mots 1, 4, 5, 7 sont des critères de comparaison nécessaires et
suffisants pour affirmer que les 2 lignes sont identiques
H5 - les mots 8, 9, 10 ne doivent pas entrer en considération dans la
comparaison des lignes, mais doivent apparaître dans le rapport final
H6 - les fichiers peuvent être plutôt gros : 10000 lignes, quelques
Mo...
J'explique mon besoin.
Je veux obtenir un rapport d'écarts entre F1 et F2, qui respecte le
cahier des charges suivant :
B1 - le rapport doit présenter chaque paire de lignes de F1 et F2 dont
la clé est identique, mais dont un ou plusieurs mots à comparer sont
différents. => on parle de "ligne en écart"
B2 - si une clé de F1 se retrouve plusieurs fois dans F2, alors les
lignes supplémentaires de F2 sont considérées comme des "nouvelles
lignes".
B3 - inversement, si une clé de F2 se retrouve plusieurs fois dans F1,
alors les lignes supplémentaires de F1 sont considérées comme des
"lignes supprimées"
B4 - si une ligne de F1 voit sa clé sans correspondance dans F2, c'est
une "ligne supprimée"
B5 - inversement, si une ligne de F2 voit sa clé sans correspondance
dans F1, c'est une "nouvelle ligne"
B6 - Pour chacune des lignes identifiées par les règles B1 à B5, le
rapport doit ressortir la ligne du ou des fichiers concernés,
préfixée par le nom du fichier et l'information "nouvelle ligne" ou
"ligne supprimée" ou "ligne en écart". Pour les "lignes en écart",
les mots qui sont différents doivent être mis en évidence
Voici où j'en suis :
J'ai fait un script qui fonctionne très bien en bash, mais :
- j'ai peur que sur de gros fichiers le shell ne soit pas une bonne
option (pb de perf ?)
- mon script utilise des "exec 3<$fichier1" puis "read -u 3 -a tableau"
pour lire les lignes de chaque fichier, mais le script est destiné à
tourner dans un environnement où je ne sais pas si le fd n°3 sera
libre.
Voici ma question :
Comment obtenir un numéro de file descriptor "libre" afin d'éviter de
devoir spécifier un numéro "en dur" dans la commande "exec
3<$fichier1" ?
Il existe déjà un shell qui fait une comparaison de fichier et générant en option soit un fichier texte rapport, soit un fichier HTML rapport, etc... Il marche très bien, je l'utilise à mon boulot. Le hic c'est qu'étant le WE, impossible pour moi de te filer son nom. Si Jeudi tu n'as pas eu de nouvelles envoi moi un mail je te donnerai son nom (et oui, je reviens tard de WE ;) )
A+
a écrit dans le message de news:
Bonjour,
Je suis un peu débutant en shell et en commandes unix, donc j'ai des difficultés et j'ai besoin d'aide :)
J'ai besoin de comparer de 2 fichiers en produisant un rapport de comparaison respectant des règles strictes. Ce rapport de comparaison sera exploité sous excel ou en html, je ne sais pas encore, le but étant d'en faire qq chose de visuel qui présente les écarts.
(pour les gens pressés, la question est en bas, ce qui suit plante le décor...)
Hypothèses : H1 - mes deux fichiers F1 et F2 peuvent avoir un nb de lignes différents H2 - chaque ligne comporte toujours le meme nombre de mots H3 - les mots 3, 2, et 6 constituent une clé de tri (non unique) et de comparaison pour identifier les lignes de F1 et F2 qui sont en correspondance H4 - pour deux lignes de F1 et F2 ayant la même clé (voir H3), les mots 1, 4, 5, 7 sont des critères de comparaison nécessaires et suffisants pour affirmer que les 2 lignes sont identiques H5 - les mots 8, 9, 10 ne doivent pas entrer en considération dans la comparaison des lignes, mais doivent apparaître dans le rapport final H6 - les fichiers peuvent être plutôt gros : 10000 lignes, quelques Mo...
J'explique mon besoin. Je veux obtenir un rapport d'écarts entre F1 et F2, qui respecte le cahier des charges suivant : B1 - le rapport doit présenter chaque paire de lignes de F1 et F2 dont la clé est identique, mais dont un ou plusieurs mots à comparer sont différents. => on parle de "ligne en écart" B2 - si une clé de F1 se retrouve plusieurs fois dans F2, alors les lignes supplémentaires de F2 sont considérées comme des "nouvelles lignes". B3 - inversement, si une clé de F2 se retrouve plusieurs fois dans F1, alors les lignes supplémentaires de F1 sont considérées comme des "lignes supprimées" B4 - si une ligne de F1 voit sa clé sans correspondance dans F2, c'est une "ligne supprimée" B5 - inversement, si une ligne de F2 voit sa clé sans correspondance dans F1, c'est une "nouvelle ligne" B6 - Pour chacune des lignes identifiées par les règles B1 à B5, le rapport doit ressortir la ligne du ou des fichiers concernés, préfixée par le nom du fichier et l'information "nouvelle ligne" ou "ligne supprimée" ou "ligne en écart". Pour les "lignes en écart", les mots qui sont différents doivent être mis en évidence
Voici où j'en suis : J'ai fait un script qui fonctionne très bien en bash, mais : - j'ai peur que sur de gros fichiers le shell ne soit pas une bonne option (pb de perf ?) - mon script utilise des "exec 3<$fichier1" puis "read -u 3 -a tableau" pour lire les lignes de chaque fichier, mais le script est destiné à tourner dans un environnement où je ne sais pas si le fd n°3 sera libre.
Voici ma question : Comment obtenir un numéro de file descriptor "libre" afin d'éviter de devoir spécifier un numéro "en dur" dans la commande "exec 3<$fichier1" ?
Merci pour votre aide :)
tittom
Stephane Chazelas wrote:
On 28 Oct 2005 08:44:10 -0700, wrote: [...]
Comment obtenir un numéro de file descriptor "libre" afin d'éviter de devoir spécifier un numéro "en dur" dans la commande "exec 3<$fichier1" ? [...]
S'il n'est pas libre, le shell le fermera avant, ca ne devrait pas poser de probleme a moins que ton script ne lance une commande qui attend a trouver quelque chose de particulier sur son fd 3.
Mais si mon shell le ferme, je ne risque pas de perturber un autre process ? Ca veut dire que chaque process a sa propre liste de fd ?
Pourquoi ne pas utiliser awk pour ton probleme?
Parceque je ne connais pas (encore) bien awk, et que le peu qu'on m'en a dit ne me semblait pas correspondre à mon besoin : il peut arriver que je lise plusieurs ligne de F1 sans trouver d'équivalent dans F2, et inversement.
Merci pour la réponse :)
-- Tittom
Stephane Chazelas wrote:
On 28 Oct 2005 08:44:10 -0700, tittom@free.fr wrote:
[...]
Comment obtenir un numéro de file descriptor "libre" afin d'éviter de
devoir spécifier un numéro "en dur" dans la commande "exec
3<$fichier1" ?
[...]
S'il n'est pas libre, le shell le fermera avant, ca ne devrait
pas poser de probleme a moins que ton script ne lance une
commande qui attend a trouver quelque chose de particulier sur
son fd 3.
Mais si mon shell le ferme, je ne risque pas de perturber un autre
process ?
Ca veut dire que chaque process a sa propre liste de fd ?
Pourquoi ne pas utiliser awk pour ton probleme?
Parceque je ne connais pas (encore) bien awk, et que le peu qu'on m'en
a dit ne me semblait pas correspondre à mon besoin : il peut arriver
que je lise plusieurs ligne de F1 sans trouver d'équivalent dans F2,
et inversement.
Comment obtenir un numéro de file descriptor "libre" afin d'éviter de devoir spécifier un numéro "en dur" dans la commande "exec 3<$fichier1" ? [...]
S'il n'est pas libre, le shell le fermera avant, ca ne devrait pas poser de probleme a moins que ton script ne lance une commande qui attend a trouver quelque chose de particulier sur son fd 3.
Mais si mon shell le ferme, je ne risque pas de perturber un autre process ? Ca veut dire que chaque process a sa propre liste de fd ?
Pourquoi ne pas utiliser awk pour ton probleme?
Parceque je ne connais pas (encore) bien awk, et que le peu qu'on m'en a dit ne me semblait pas correspondre à mon besoin : il peut arriver que je lise plusieurs ligne de F1 sans trouver d'équivalent dans F2, et inversement.
Merci pour la réponse :)
-- Tittom
Jean-Louis Liagre
wrote:
[...] Mais si mon shell le ferme, je ne risque pas de perturber un autre process ? Ca veut dire que chaque process a sa propre liste de fd ?
Oui, et heureusement, quel foutoir ça serait si les stdin et stdout étaient partagés par tous les processes !
tittom@free.fr wrote:
[...]
Mais si mon shell le ferme, je ne risque pas de perturber un autre
process ?
Ca veut dire que chaque process a sa propre liste de fd ?
Oui, et heureusement, quel foutoir ça serait si les
stdin et stdout étaient partagés par tous les processes !