Pb avec la commande comm

Résolu/Fermé
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 - 1 mars 2013 à 16:41
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 - 4 mars 2013 à 14:14
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.

5 réponses

dubcek Messages postés 18719 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 mai 2024 5 615
2 mars 2013 à 08:34
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é
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
4 mars 2013 à 09:57
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.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
4 mars 2013 à 10:05
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 ;-\
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
4 mars 2013 à 10:20
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.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
4 mars 2013 à 10:35
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 ;-\
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
4 mars 2013 à 10:54
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é
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
4 mars 2013 à 11:32
Merci.

Par contre comment arrives-tu à ce résultat (avec ou sans tabulations) ?
Parce que j'ai beau essayé toutes les combinaisons possibles avec la commande "comm", je n'obtiens jamais ces trois résultats là ;-\
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
4 mars 2013 à 11:48
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...
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
4 mars 2013 à 11:58
Pour la suppression des tabulations (en exemple les 2 fichiers donnés plus haut) :
$ 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
0
dubcek Messages postés 18719 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 mai 2024 5 615
4 mars 2013 à 10:46
Comment puis-je enlever cet tabulation ?
avec sed comme tu le fais ou
tr -d '\t'
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
4 mars 2013 à 11:17
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
0
dubcek Messages postés 18719 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 mai 2024 5 615
Modifié par dubcek le 4/03/2013 à 11:56
non, c'est autre commande, mais le sed va très bien
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
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
4 mars 2013 à 11:52
Ok.
je vais le tester car à priori la premier méthode ne marche pas ici ou je suis.

Merci ;-)
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
4 mars 2013 à 11:56
Test effectué mais toujours le décalage... :-(

merci quand même
0

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

Posez votre question
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
4 mars 2013 à 14:14
MERCI a tous pour vos réponses.

Voila la seul solution qui a fonctionné :
$ sort f1 f2 | uniq -u

De toute façon vu q'il faut que je réhabilite tous mon script vous risquez de me revoir bientôt.. ;-P
0