[SHELL] jointure entre 2 fichiers (Résolu)

jointure entre 2 fichiers (Résolu) [SHELL] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 23-02-2016 à 15:39:37    

Bonjour,
 
Je suis débutant en shell. :whistle:  :sweat:  
 
J'ai 2 fichiers que l'on va appeler fica et ficb
dans le fica, j'ai une référence sur 32 caractères.
 
Mon but est de ressortir toutes les lignes de ficb qui contiennent les références présentes dans fica
 
J'ai réussi à trier mon fica
 
J'ai 2 soucis :
1) dans ficb cette référence se trouve en position 90
je fais la commande suivante : sort -90 +122 ficb > ficb_trie
mais cela ne trie pas mon fichier
 
2) j'ai essayer malgrè le fiat que le fichier ficb ne soit pas trié plusieurs options de join mais je n'ai rien en sortie.  
join fica ficb > result
join -j11 fica ficb > result
 
Est-ce qu'un pro peu m'aider svp ?
 
D'avance Merci


Message édité par zoul72 le 24-02-2016 à 15:20:07
Reply

Marsh Posté le 23-02-2016 à 15:39:37   

Reply

Marsh Posté le 23-02-2016 à 19:35:30    

tu peux faire une boucle
 
 
tant que lecture
faire
pourligne chercher pattern dans ficb
fin injection fica
 
ne pas prendre peur  

francois@:~$ echo a > fica
francois@:~$ echo b >> fica
francois@:~$ echo c >> fica
francois@:~$ echo b >> ficb
francois@:~$ # dans l exemple y aura qu 1 retour (b)  
francois@:~$  
francois@:~$ while read
> do
> echo $REPLY
> grep $REPLY ficb
> done < fica > result
francois@:~$ cat result
a
b
b
c
francois@:~$ rm fic{a,b} result
francois@:~$  


 
 
$REPLY est la varable de read  
 
on a bien un fichier resultat avec a b c venant de fica et surtout le b de ficb  qui ont bien fusionnes
 
si tu narrives pas a adapter tu poux donner un exemple de ligne de chaque fichier  
 et le resultat voulu ..  :hello:  
 
J'ai 2 soucis :
1) dans ficb cette référence se trouve en position 90
avec ta methode tu est obliger de connaitre la position... grep cherche un pattern sans specifier de position
 
2) j'ai essayer malgrè le fiat que le fichier ficb ne soit pas trié plusieurs options de join mais je n'ai rien en sortie.  
vu ton besoin un fichier resultat etait bien la bonne solution mais un join ...pas sur
 
 
 
 

Reply

Marsh Posté le 24-02-2016 à 03:19:32    

salut,
 
ce serait quand même plus clair avec un échantillon représentatif des deux fichiers, et la sortie attendu pour l'échantillon.

Reply

Marsh Posté le 24-02-2016 à 11:38:47    

Merci pour vos réponses

 

par exemple dans le fica j'ai la plus part du temps 7 chiffres suivis d'espaces mais la zone réservée est sur 32 alphanumérique:


1234567                                  

 

dans ficb j'ai :


A123456789BC                   012345678901230011234567                         00reste du fichier
ma référence se trouve ici     |------------------------|

 

J'ai testé ce que kuroineko_fr a donné(en enlevant le "echo $REPLY" )  mais dans le fichier résultat, je n'ai que la dernière occurrence trouvée.

 

J'ai essayé de déplacé la redirection vers le fichier Résultat :

 

while read
do
 grep $REPLY Ficb > Res
done < Fica

 

J'ai des lignes blanches et la dernière occurrence trouvée.


Message édité par black_lord le 24-02-2016 à 13:42:14
Reply

Marsh Posté le 24-02-2016 à 12:16:09    

oui ma faute j ai pas explique ca... :pt1cable:  dans lexemple  avais qu un resultat attendu
 
 
>>  alimente le fichier  
> creer un nouveau fichier
 
 
donc avec un >>  apres le grep ca devrait aller
 
:hello:

Reply

Marsh Posté le 24-02-2016 à 14:21:03    

J'ai toujours le même problème : grep ne trouve que la dernière occurrence alors que je sais que tout ce qui est dans mon fica est présent dans ficb
J'ai trouvé que le résultat de la dernière commande exécutée est dans la variable $?
 

Citation :


while read
do
 echo $REPLY
 grep $REPLY Ficb >> Res
 echo $?
done < Fica


 
 
J'ai ca en résultat, il n'y a que la dernière ligne qui est trouvée!

Citation :


9737019
1
9813733
1
9816351
1
9824721
0


Message édité par zoul72 le 24-02-2016 à 14:22:18
Reply

Marsh Posté le 24-02-2016 à 15:01:46    

J'ai modifié mon fichier Fica de plusieurs façon pour arriver à ce que le grep ne trouve rien ! :cry:  
 
J'utilise ultraedit en ftp pour créer et modifier mes fichiers.
 
Est-ce que mon problème ne viendrai pas de là avec des histoire de caractères de fin de ligne ou fin de fichier spécifique à unix ?
 
en vue Hexa, j'ai 0D et 0A  en fin de chaque ligne sauf la dernière qui est 0A  :pt1cable:


Message édité par zoul72 le 24-02-2016 à 15:04:52
Reply

Marsh Posté le 24-02-2016 à 15:19:48    

:bounce:  :bounce:  :bounce:  
 
Trouvé !
 
J'ai sauvegardé mon fichier source en ASCII au lieu de binaire avec ultra edit et j'ai trouvé toutes mes références !
 
Merci beaucoup pour l'aide !

Reply

Marsh Posté le 24-02-2016 à 18:29:47    

bien vu
:D :sol:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed