Visit Our UNIX and Linux User Community


Joindre deux fichier avec deux champs de jointure


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Joindre deux fichier avec deux champs de jointure
# 1  
Old 08-07-2009
Joindre deux fichier avec deux champs de jointure

Hello,

I come to you asking you a hand on a script that I have performed on a unix server.

I have two files that I have to concatenate in a single line.

The first file is created like this:
Code:
mag;code_art;campagne;st_juillet;st_aout;etc


The second file is created like this:
Code:
code_art;campagne;pma_juillet;pma_aout;etc


and the final should be like this:
Code:
mag;code_art;campagne;st_juillet;st_aout;etc;pma_juillet;pma_aout;etc...

Basically I do a join on two fields that are code_art and campagne.

And I plant, because I tried to join but the result is false because the joint can be achieved only on a field.
Basically, I give you an example and hope that you will be inspired much more than me because I really dry.

Example:

The first file includes this:
Code:
mag;code_art;campagne;st_juillet;st_aout;etc
201;106;2007;12;23;etc
201;206;2008;11;13;etc
113;206;2007;12;14;etc
112;208;2008;34;25;etc


The second file contains this:
Code:
code_art;campagne;pma_juillet;pma_aout;etc
206;2007;112;118,etc
201;2008;115;120;etc
206;2008;175;195;etc
106;2007;340;152;etc
208;2008;32;12;etc
etc.........

and the final file should look like this:
Code:
mag;code_art;campagne;st_juillet;st_aout;etc;pma_juillet;pma*_aout;etc
201;206;2008;11;13;etc;112;118;etc
201;106;2007;12;23;etc;340;152;etc
112;208;2008;34;25;etc;32;12;etc

I finish this post a little long, thank you in advance for your help.

Amicalement
Steph70

Last edited by steph70; 08-07-2009 at 03:06 PM..
# 2  
Old 08-07-2009
English please. These forums are English-language.
# 3  
Old 08-07-2009
En Anglais, s'il vous plait. Please post in English.

Per our forum rules, all posts must be in English.

We do provide translation services for posts from English to a number of languages as a benefit to users. However, posts must be in English.

Please repost in English.

Thank you for your cooperation.

The UNIX and Linux Forums.
# 4  
Old 08-07-2009
EDIT: after re-reading your post, this script does not correspong to what you want to do ... but it can help you
---------------
I came up with a script -in bash- like this, I hope it will be useful:
Code:
#!/bin/bash

array1=($(sed 's/;/\ /g' file1))
array2=($(sed 's/;/\ /g' file2))
cat /dev/null > file3
for ((i=0; i<${#array1[*]}; i++)); do
    echo ${array1[$i]}';'${array2[$i]} >> file3;
done
exit 0

file1 and file2 are text files containing your datas
file3 will be created with your data joined together
How does it works:
Lines 3 and 4: we create 2 arrays containing datas (we replace ; with \ (spaces))
Line 5; we create a empty file3
Line 6, 7 and 8: we join together datas from array1 and array 2.
The script was tested with 2 sample files:
Code:
file1:
1;3;5;7;9
11;13;15;17;19

file2;
2;4;6;8;10
12;14;16;18;20

resulting file3:
1;2
3;4
5;6
7;8
9;10
11;12
13;14
15;16
17;18
19;20

# 5  
Old 08-07-2009
Excuse me for the language.
I went a little fast.

I do care now.

Thank you tukuyomi. I look and I tested.
# 6  
Old 08-07-2009
Code:
#!/bin/bash

array1=($(sed 's/;/\ /g' file1))
array2=($(sed 's/;/\ /g' file2))
cat /dev/null > file3

i=0; j=0
while read line; do
    echo ${array1[(($i+0))]}';'${array1[(($i+1))]}';'${array1[(($i+2))]}';'${array1[(($i+3))]}';'${array1[(($i+4))]}';'${array1[(($i+5))]}';'${array2[(($j+2))]}';'${array2[(($j+3))]}';'${array2[(($j+4))]} >> file3
    ((i+=6)); ((j+=5))
done < file1
exit 0

This one will work, BUT
file1 AND file2 must have the same exact number of lines
file1 has exactly 6 fields delimited with ; ((i+=6))
file2 has exactly 5 fields delimited with ; ((j+=5))

By the way, you have a comma (,) instead of a semi-colon (;) in your file2 sample (2nd line); it took me about an hour to find it :D

Last edited by tukuyomi; 08-07-2009 at 03:56 PM..
# 7  
Old 08-07-2009
Thank you again

The concern is that both files have not precisely the same number of line.

The first should be about 400 000 and the second about half.

It is not easy

Previous Thread | Next Thread
Test Your Knowledge in Computers #69
Difficulty: Easy
Grep stands for 'global regular expression process'.
True or False?

8 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help script shell find fichier

Hello, I am looking for a shell script that can 1- take as input a variable, like "server.cpu" 2- do a search for that variable in a directory that contains subdirectories. The search will start at the last subdirectory working up to the top level if I can not find the file 3-... (7 Replies)
Discussion started by: georg2014
7 Replies

2. AIX

Mémoire insuffisante avec awk

Bonjour, Je suis sur Aix 5 et j'ai un script qui traite un fichier texte de 5 G. Au lancement du scripte,j'ai le message suivant: awk : 0602-561 MÚmoire disponible insuffisante actuellement. Voir le script "blan.sh" awk 'BEGIN { print "Traitement de votre fichier " FILENAME } ... (1 Reply)
Discussion started by: earlaphe
1 Replies

3. Shell Programming and Scripting

Script Send Mail by Parameters avec Attached file

Hi i have a script for show the information files. ls -l how do you for to place this result in a file of text and to send it attached for e-mail. The information of the mail must be in paramentros. for example e-mail to I must write the e-mail, the subject and the motive of the mail! ... (1 Reply)
Discussion started by: krlos07
1 Replies

4. AIX

Ajout colonne calcuée ds un fichier .txt

Mon but est de créer un script ksh ou commande aix permettant ceci. J'ai un fichier .txt organisé par bloc d'informations, chaque bloc débute par 000 et ce comme suit : 000... 001... 003... 004... 000... 001... 003... 004... . . .Mon but est d'ajouter une colonne en fin de chaque ligne afin... (2 Replies)
Discussion started by: zainab2006
2 Replies

5. Solaris

Probleme avec SVM

Bonjour, J'ai ajouté par erreur à un sous mirroir des disques de cette facon : metattach d53 c2t90d0s0 c2t90d1s0 ... alors que j'aurais du faire un stripe par disque (comme ça) : metattach d53 c2t90d0s0 metattach d53 c2t90d1s0 .. Derriere, j'ai fais un growfs -M du FS pour l'aggrandir et... (1 Reply)
Discussion started by: phil.nakache
1 Replies

6. HP-UX

Target LUNs plus que deux sur un SAN de 2 fabrics

salut admin, Normalement mon serveur doit voir un de mes LDEV à partir de deux chemins sur le SAN et ainsi lui attribuer seulement deux Target LUNs. Or il lui en a attribué 8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Très bizzare! Auriez vous une idée. Merci pour votre aide appréciée (2 Replies)
Discussion started by: hmaiida
2 Replies

7. Solaris

Fichier d'erreur

bonjour Ou puis je trouver les fichiers d'erreur (l'équivalent du errpt sous Aix) sous Sun Solaris ? merci (5 Replies)
Discussion started by: pascalbout
5 Replies

8. Solaris

Filesystems Part Deux

In reading Ralph's pervious post I came accross a question. Say you have two hard drives in your system. One is running Solaris 10 and the other is Linux on ext2 FS. Is it possible to mount the linux using Solaris and transfer files? Thanks, Robert (1 Reply)
Discussion started by: Phobos
1 Replies

Featured Tech Videos