Pb avec la commande comm
Résolu
JsuisNul
Messages postés
125
Date d'inscription
Statut
Membre
Dernière intervention
-
JsuisNul Messages postés 125 Date d'inscription Statut Membre Dernière intervention -
JsuisNul Messages postés 125 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'essaye d'adapter un vieux script pour lequel certain d'entre vous mon beaucoup aidé à le faire.
J'ai un soucis avec la commande comm.
j'ai donc deux fichiers structuré de la même façon (fichier de longueur fixe ou je compare la version de la veille avec celle du jour).
j'utilise la commande comme suit :
comm -3 $SIGACS/file/fich1_REF_Sorted.P $SIGACS/file/fich2_Sorted.P |sed 's/^[ \t]*//'|sort -k 1 > $FICTemp4
le soucis est qu'au lieu d'avoir dans mon fichier final :
mec1;aaaa;bbb;cccc
mec2;aagg;bbs;cco
mec3;aaaa;bbb;cccc
mec4;zagg;qbs;cxo
J'ai un décalage sur le première ligne ( espace à la place des "----" :
--------mec1;aaaa;bbb;cccc
--------mec2;aagg;bbs;cco
mec3;aaaa;bbb;cccc
mec4;zagg;qbs;cxo
quand j'affiche la tabulation j'ai ">>" au début des ligne décalé (en plus petit)
quelqu'un sait à quoi cella pourrait être du ?
Merci à tous d'avance.
J'essaye d'adapter un vieux script pour lequel certain d'entre vous mon beaucoup aidé à le faire.
J'ai un soucis avec la commande comm.
j'ai donc deux fichiers structuré de la même façon (fichier de longueur fixe ou je compare la version de la veille avec celle du jour).
j'utilise la commande comme suit :
comm -3 $SIGACS/file/fich1_REF_Sorted.P $SIGACS/file/fich2_Sorted.P |sed 's/^[ \t]*//'|sort -k 1 > $FICTemp4
le soucis est qu'au lieu d'avoir dans mon fichier final :
mec1;aaaa;bbb;cccc
mec2;aagg;bbs;cco
mec3;aaaa;bbb;cccc
mec4;zagg;qbs;cxo
J'ai un décalage sur le première ligne ( espace à la place des "----" :
--------mec1;aaaa;bbb;cccc
--------mec2;aagg;bbs;cco
mec3;aaaa;bbb;cccc
mec4;zagg;qbs;cxo
quand j'affiche la tabulation j'ai ">>" au début des ligne décalé (en plus petit)
quelqu'un sait à quoi cella pourrait être du ?
Merci à tous d'avance.
A voir également:
- Pb avec la commande comm
- Invite de commande - Guide
- Commande terminal mac - Guide
- Commande dism - Guide
- Diskpart commande - Guide
- Commande scannow - Guide
5 réponses
hello
comm insère une tabulation pour différencier les données qui viennent d'un fichier ou de l'autre
--output-delimiter="" n'est pas accepté
comm insère une tabulation pour différencier les données qui viennent d'un fichier ou de l'autre
--output-delimiter="" n'est pas accepté
Bonjour,
Merci pour ta réponse. ce qui m'étonne c'est que je l'avais déjà utilisée cette commande sans que ça me le fasse comme ça.
Comment puis-je enlever cet tabulation ?
Merci.
Merci pour ta réponse. ce qui m'étonne c'est que je l'avais déjà utilisée cette commande sans que ça me le fasse comme ça.
Comment puis-je enlever cet tabulation ?
Merci.
Salut,
Le problème ce n'est pas d'enlever la tabulation, mais de savoir ce que tu veux exactement ?
Il serait bien de savoir ce que contiennent tes fichiers de départ et ce que tu veux en sortie !
Si la sortie de la commande "comm" ne te convient pas, c'est peut être que ce n'est pas la commande appropriée à ton traitement ;-\
Le problème ce n'est pas d'enlever la tabulation, mais de savoir ce que tu veux exactement ?
Il serait bien de savoir ce que contiennent tes fichiers de départ et ce que tu veux en sortie !
Si la sortie de la commande "comm" ne te convient pas, c'est peut être que ce n'est pas la commande appropriée à ton traitement ;-\
Bonjour Zipe31,
Je sais ce que je veux faire et comme je l'ai précisé au début, j'essaye d'adapter un vieux script qui fonctionne très bien et qui faisait exactement ce que je souhaitais à l'époque et ce que j'aimerai faire maintenant.
Le but de ce script étant de comparer un fichier extrait du jour à celui extrait de la veille. le fichier est un fichier plat de longueur fixe et des séparateurs de champs ";" . je cherche donc à identifier les lignes modifiées ou ajoutée ou retirée. Pour cela la mécanique générale de mon script est apparemment bonne.
Ce que je constate c'est qu'il ne réagit pas de la même façon et que je dois adapter certaine commande.
Ce que je souhaite donc c'est qu'il n'y est pas cette tabulation car je dois comparer les lignes entre elles de ce même fichier.
Je sais ce que je veux faire et comme je l'ai précisé au début, j'essaye d'adapter un vieux script qui fonctionne très bien et qui faisait exactement ce que je souhaitais à l'époque et ce que j'aimerai faire maintenant.
Le but de ce script étant de comparer un fichier extrait du jour à celui extrait de la veille. le fichier est un fichier plat de longueur fixe et des séparateurs de champs ";" . je cherche donc à identifier les lignes modifiées ou ajoutée ou retirée. Pour cela la mécanique générale de mon script est apparemment bonne.
Ce que je constate c'est qu'il ne réagit pas de la même façon et que je dois adapter certaine commande.
Ce que je souhaite donc c'est qu'il n'y est pas cette tabulation car je dois comparer les lignes entre elles de ce même fichier.
j'essaye d'adapter un vieux script qui fonctionne très bien et qui faisait exactement ce que je souhaitais à l'époque
D'où mon interrogation concernant la commande "comm" qui n'est peut être pas la plus appropriée ;-\
je cherche donc à identifier les lignes modifiées ou ajoutée ou retirée. Pour cela la mécanique générale de mon script est apparemment bonne.
Celle de l'ancien script ou avec la commande "comm" ?
Ce que je constate c'est qu'il ne réagit pas de la même façon et que je dois adapter certaine commande.
Si on pouvait avoir un exemple concret (un bout des 2 fichiers à comparer et la sortie que tu attends), peut être serions-nous plus à même de t'aider ;-\
D'où mon interrogation concernant la commande "comm" qui n'est peut être pas la plus appropriée ;-\
je cherche donc à identifier les lignes modifiées ou ajoutée ou retirée. Pour cela la mécanique générale de mon script est apparemment bonne.
Celle de l'ancien script ou avec la commande "comm" ?
Ce que je constate c'est qu'il ne réagit pas de la même façon et que je dois adapter certaine commande.
Si on pouvait avoir un exemple concret (un bout des 2 fichiers à comparer et la sortie que tu attends), peut être serions-nous plus à même de t'aider ;-\
1- A priori la commande comm est approprié puisque le script à fonctionné comme souhaité
2- la mécanique générale de mon script a été faite en utilisant que la commande "comm" avec laquelle j'ai obtenu les résultats souhaités.
3- le première exemple c'est cette tabulation que je ne n'avais pas avant par exemple.
c'est également la commande suivante ( la partie en gras) qui ne fonctionne pas aujourd'hui :
uniq -u --check-chars=7 que j'ai du modifier comme suit uniq -u -f 1
exemple de fichier :
fichier 1 (la veille)
mec1;pepito;rue;CDD
mec2;toto;avenue;CDI
mec3;jean;rue;CDD
mec4;dupont;boulevard;CDD
fichier 2 (du jour)
mec1;pepito;rue;CDI
mec2;toto;avenue;CDI
mec4;dupont;boulevard;CDD
mec5;pierre;rue;CDI
Résultat du script :
mec1;pepito;rue;CDI => car modifié
mec3;jean;rue;CDD => car sorti
mec5;pierre;rue;CDI => car arrivé
2- la mécanique générale de mon script a été faite en utilisant que la commande "comm" avec laquelle j'ai obtenu les résultats souhaités.
3- le première exemple c'est cette tabulation que je ne n'avais pas avant par exemple.
c'est également la commande suivante ( la partie en gras) qui ne fonctionne pas aujourd'hui :
uniq -u --check-chars=7 que j'ai du modifier comme suit uniq -u -f 1
exemple de fichier :
fichier 1 (la veille)
mec1;pepito;rue;CDD
mec2;toto;avenue;CDI
mec3;jean;rue;CDD
mec4;dupont;boulevard;CDD
fichier 2 (du jour)
mec1;pepito;rue;CDI
mec2;toto;avenue;CDI
mec4;dupont;boulevard;CDD
mec5;pierre;rue;CDI
Résultat du script :
mec1;pepito;rue;CDI => car modifié
mec3;jean;rue;CDD => car sorti
mec5;pierre;rue;CDI => car arrivé
En faite, mon script ne se résume pas juste au comm car il y a toute une mécanique derrière qui me permet d'arrivée à ce résultat.
Le comm je l'utilise deux fois puis après c'est de la manipulation de fichiers.
Dans la parti qui pose problème pour l'instant, mon but est d'isoler les vrai lignes uniques dans chacun des deux fichiers de départ (ligne qui n'apparait que dans seulement l'un ou l'autre des fichiers ).
Le soucis est qu'une ligne modifié sera considérée comme unique dans chacun des fichiers. Pour ce faire après mon comm, j'utilise la commande uniq sur le premier champs car je sais que c'est un identifiant unique.
Si dans le fichier que j'essaye de construire on a deux fois ce même identifiant je sais alors que c'est une modification donc je n'en veux pas car ce cas là je le traite ailleurs.
C'est pour cela qu'il est important que mon fichier ne soit pas fait avec des tabulation en début de ligne mais que toutes mes lignes début au même endroit.
en espérant avoir été suffisamment clair...
Le comm je l'utilise deux fois puis après c'est de la manipulation de fichiers.
Dans la parti qui pose problème pour l'instant, mon but est d'isoler les vrai lignes uniques dans chacun des deux fichiers de départ (ligne qui n'apparait que dans seulement l'un ou l'autre des fichiers ).
Le soucis est qu'une ligne modifié sera considérée comme unique dans chacun des fichiers. Pour ce faire après mon comm, j'utilise la commande uniq sur le premier champs car je sais que c'est un identifiant unique.
Si dans le fichier que j'essaye de construire on a deux fois ce même identifiant je sais alors que c'est une modification donc je n'en veux pas car ce cas là je le traite ailleurs.
C'est pour cela qu'il est important que mon fichier ne soit pas fait avec des tabulation en début de ligne mais que toutes mes lignes début au même endroit.
en espérant avoir été suffisamment clair...
Pour la suppression des tabulations (en exemple les 2 fichiers donnés plus haut) :
Mais bon on obtient le même résultat avec :
$ comm -3 f1 f2 mec1;pepito;rue;CDD mec1;pepito;rue;CDI mec3;jean;rue;CDD mec5;pierre;rue;CDI $ comm -3 f1 f2 | tr -d '\t' mec1;pepito;rue;CDD mec1;pepito;rue;CDI mec3;jean;rue;CDD mec5;pierre;rue;CDI
Mais bon on obtient le même résultat avec :
$ sort f1 f2 | uniq -u mec1;pepito;rue;CDD mec1;pepito;rue;CDI mec3;jean;rue;CDD mec5;pierre;rue;CDI
Comment puis-je enlever cet tabulation ?
avec sed comme tu le fais ou
avec sed comme tu le fais ou
tr -d '\t'
Excuse moi, je le mets à la place de ce qui est déjà en argument du sed avec mon comm ??
comm -3 $SIGACS/file/fich1_REF_Sorted.P $SIGACS/file/fich2_Sorted.P |sed 's/^[ \t]*//'|sort -k 1 > $FICTemp4
comme ça
comm -3 $SIGACS/file/fich1_REF_Sorted.P $SIGACS/file/fich2_Sorted.P |sed tr -d '\t' |sort -k 1 > $FICTemp4
comm -3 $SIGACS/file/fich1_REF_Sorted.P $SIGACS/file/fich2_Sorted.P |sed 's/^[ \t]*//'|sort -k 1 > $FICTemp4
comme ça
comm -3 $SIGACS/file/fich1_REF_Sorted.P $SIGACS/file/fich2_Sorted.P |sed tr -d '\t' |sort -k 1 > $FICTemp4
non, c'est autre commande, mais le sed va très bien
le sed ne traite que les tabs en début de ligne, tr va tous les supprimer
comm -3 $SIGACS/file/fich1_REF_Sorted.P $SIGACS/file/fich2_Sorted.P |sed 's/^[ \t]*//'|sort -k 1 > $FICTemp4 ou comm -3 $SIGACS/file/fich1_REF_Sorted.P $SIGACS/file/fich2_Sorted.P | tr -d '\t' |sort -k 1 > $FICTemp4
le sed ne traite que les tabs en début de ligne, tr va tous les supprimer
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question