Merging two files baased on condition


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Merging two files baased on condition
# 1  
Old 01-04-2013
Merging two files baased on condition

Hi All,
I have two below files(fileds separated by space).

File1
Code:
001078401      A      5A1
001078401     B       085
001030035   A      5A1
001030035   B       085

File2
Code:
001078401      C      001
001078401      D   065
001030035   C      001
001030035   D   065

And the out file should be

Code:
001078401    A       5A1   B     085   C     001  D     065
001030035  A       5A1   B     085   C     001  D     065

Files would be joined on a common filed, then i need one row for a single id.
Please guide me, how can i achieve this.
Moderator's Comments:
Mod Comment
Please use code tags when posting data and code samples!


Thanks & Regards

Last edited by vgersh99; 01-04-2013 at 10:54 AM.. Reason: code tags, please!
# 2  
Old 01-04-2013
try:
Code:
awk '
! a[$1] {a[$1]=$1}
{ for (i=2; i<=NF; i++) a[$1]=a[$1] OFS $i; }
END {for (i in a) print a[i]}
' File1 File2

This User Gave Thanks to rdrtx1 For This Post:
# 3  
Old 01-07-2013
Hi,

I am slightly changing the requirement.
Please help.

I have a single file like..
Code:
001078401*A*001
001078401*B*065
00107840*A*001
001078401*C*001
00107840*D*065
001078401*E*1200
001030035*A*001
001030035*B*065
001030035*C*001
001030035*D*065
001030031*E*200
001030035*E*1200
001030032*D*06
001030031*E*1200

And required output format is...

Code:
001078401*A*001*B*065*C*001*E*1200
00107840*A*001*D*065
001030035*A*001*B*065*C*001*D*065*E*1200
001030031*E*200*E*1200
001030032*D*06

Thanks

Last edited by Scott; 01-07-2013 at 09:02 AM.. Reason: Code tags
# 4  
Old 01-07-2013
Using a Perl script :
Code:
#!/usr/bin/perl -w
use strict;

my $cur_dir = $ENV{PWD};
my $filename = $cur_dir."/file";
my ($record,$field,@fields,%hash);

open(FILE,"<$filename") or die"open: $!";

while( defined( $record = <FILE> ) ) {
  chomp $record;
  @fields=split(/\*/,$record);
  $hash{$fields[0]}.="\*$fields[1]\*$fields[2]";
}

foreach (sort keys %hash) {
  print "$_$hash{$_}\n";
}

close(FILE);

Output :
Code:
001030031*E*200*E*1200
001030032*D*06
001030035*A*001*B*065*C*001*D*065*E*1200
00107840*A*001*D*065
001078401*A*001*B*065*C*001*E*1200

# 5  
Old 01-07-2013
Or you could simply change the code provided by rdrtx1 in message #2 in this thread to meet your new requirements:
Code:
awk 'BEGIN{FS = "[*]";OFS = "*"}
! a[$1] {a[$1]=$1}
{ for (i=2; i<=NF; i++) a[$1]=a[$1] OFS $i; }
END {for (i in a) print a[i]}
' File1

As always, if you're using a Solaris system, use /usr/xpg4/bin/awk or nawk instead of awk.
# 6  
Old 01-07-2013
Hi,
I managed to do this....
Code given below...

Code:
        BEGIN {FS = "*"}
        a[$1]= a[$1]"*" $2 "*" $3
        END{for(i in a)
                print i a[i] > "satya_new.txt"
           }

Please let me know....if u see any logical error in the code

Thanks

Last edited by radoulov; 01-07-2013 at 09:52 AM.. Reason: Tags fixed.
# 7  
Old 01-07-2013
Quote:
Originally Posted by satyar
Hi,
I managed to do this....
Code given below...

Code:
        BEGIN {FS = "*"}
        a[$1]= a[$1]"*" $2 "*" $3
        END{for(i in a)
                print i a[i] > "satya_new.txt"
           }

Please let me know....if u see any logical error in the code

Thanks
Assuming that you saved the above awk script in a file (say satya.awk for purposes of this discussion), and then ran the command:
Code:
awk -f satya.awk File1

then it might or might now work since setting FS to * produces undefined behavior.

I've marked a couple of changes. The first change is needed to get defined results. Your code in the second case is unconventional, but should work as expected either way (i.e., with or without the braces}:
Code:
        BEGIN {FS = "[*]"}
           {a[$1]= a[$1]"*" $2 "*" $3}
        END{for(i in a)
                print i a[i] > "satya_new.txt"
           }

This User Gave Thanks to Don Cragun For This Post:
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Merging two files

Hi All , I have a scenario where we need to combine two files . Below are the sample files and expected output , File 1: 1|ab 1|ac 1|ae 2|ad 2|ac File 2: 1|xy 1|fc 2|gh 2|ku Output file : 1|ab|xy (3 Replies)
Discussion started by: saj
3 Replies

2. Shell Programming and Scripting

Merging two files

Guys, I am having little problem with getting a daily report! The daily process that I do is as follows 1. Unload Header for the report from the systables to one unl file, say Header.unl 2. Unload the data from the required table/tables to another unl file, say Data.unl 3. Send a... (2 Replies)
Discussion started by: PikK45
2 Replies

3. Shell Programming and Scripting

merging two files

file1.txt 1 2 10 11 56 57 7 8 43 44 and let's suppose that there is a file called file2.txt with 100 columns I want to produce a file3.txt with columns specified in file1.txt in that order (1,2,10,11,56,57,7,8,43,44) Thanks! (2 Replies)
Discussion started by: johnkim0806
2 Replies

4. Shell Programming and Scripting

Merging two files with condition

I have two files of the type 111 222 10 112 223 20 113 224 30 114 225 20 and 111 222 9 444 555 8 113 224 32 666 777 25 I want to merge files based on 1 and 2nd column. if 1st and 2nd column are unique in file 1 and 2 keep... (3 Replies)
Discussion started by: digipak
3 Replies

5. Shell Programming and Scripting

Merging two files with same name

Hello all, I have limited experience in shell scripting. Here goes my question: I have two directories that have same number of files with same file names i.e. consider 2 directories A and B. Both directories have files 1.txt, 2.txt...... I need to merge the file 1.txt of A with file 1.txt... (5 Replies)
Discussion started by: jaysean
5 Replies

6. Shell Programming and Scripting

Merging of all files based on a condition

Hi Friends, I am new to UNIX. I need to merge all the files(to FINAL.txt) in single directory based one condition. Out of all the files one of file will have specific value like :GF01: at any where in the file. so the file which is having :GF01: should be appended at the last. EX:... (5 Replies)
Discussion started by: arund_01
5 Replies

7. Shell Programming and Scripting

merging of files.

Hi, I want to merge the two files on the basis of columns like... file 1 Data Key A 12 B 13 file2 Data Value A A1 A A2 B B1 B B2 (5 Replies)
Discussion started by: clx
5 Replies

8. Shell Programming and Scripting

Help with merging files

i would like to merge two files that have the same format but have different data. i would like to create one output file that contains information from both the original files.:rolleyes: (2 Replies)
Discussion started by: joe black
2 Replies

9. Shell Programming and Scripting

merging files

Thanks in advance I have 2 files having key field in each.I would like to join both on common key.I have used join but not sucessful. The files are attached here . what i Want in the output is on the key field SLS OFFR . I have used join commd but not successful. File one ======= SNO ... (6 Replies)
Discussion started by: vakharia Mahesh
6 Replies

10. UNIX for Dummies Questions & Answers

Merging two files

Hi I have a requirement like this. I have two files This is how data1.txt looks: EI3171280 38640658501 NENN2005-12-129999-12-312005-12-12HALL NANCY 344 CHENEY HIGHWAY ... (4 Replies)
Discussion started by: venommaker
4 Replies
Login or Register to Ask a Question