Merge 3 files in 1 file in an ordered way


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Merge 3 files in 1 file in an ordered way
# 8  
Old 03-26-2010
Code:
$ for i in x{1..3}; do echo $i; done > x.dat
$ for i in y{1..4}; do echo $i; done > y.dat
$ for i in p{1..12}; do echo $i; done > p.dat

$ perl -nle '
        use integer;

        push @{$h{$ARGV}}, $_;

        END {
                $i=0;
                $fmt = "%10.10s";
                foreach $key ( sort { $#{$h{$a}} <=> $#{$h{$b}} } keys %h) {
                        $c[$i++] = $h{$key};
                }
                
                $j=$#{@c[2]}+1;
                $k=$#{@c[1]}+1;
                $l=$#{@c[0]}+1;
        
                for($i=0, $x=0, $y=0; $i<$j; $i++) {
                        printf $fmt, $c[0][$x+($i*$l/$j)]; 
                        printf $fmt, $c[1][$y++]; 
                        printf "$fmt\n", $c[2][$i];
                        $y=0 if ($y>=$k) ;      
                }
                print "\n";
        }

        ' p.dat y.dat x.dat
        x1        y1        p1
        x1        y2        p2
        x1        y3        p3
        x1        y4        p4
        x2        y1        p5
        x2        y2        p6
        x2        y3        p7
        x2        y4        p8
        x3        y1        p9
        x3        y2       p10
        x3        y3       p11
        x3        y4       p12

# 9  
Old 03-26-2010
Thank you drewk. The code posted by Franklin52 also does the job.
# 10  
Old 03-26-2010
Quote:
Originally Posted by lego
Thank you drewk. The code posted by Franklin52 also does the job.
Does that awk script work with different number of lines in the files x y and p?
# 11  
Old 03-26-2010
Code:
join -j 2 -o 1.1,2.1 x.dat y.dat |paste -d' ' - p.dat

# 12  
Old 03-26-2010
A bash way
Code:
exec 3<p-values.dat
while read X
do    while read Y
    do    read P <&3
        echo "$X $Y $P"
    done < y-values.dat
done < x-values.dat
exec 3>&-

# 13  
Old 03-26-2010
Quote:
Does that awk script work with different number of lines in the files x y and p?
Yes, the script by Franklin works with any number of lines in x (lets say, nx) and y (lets say ny). The number of lines in p (np) has to be np=nx*ny. But this is how I stated the problem..

so it's ok.
# 14  
Old 03-26-2010
Quote:
Originally Posted by lego
Yes, the script by Franklin works with any number of lines in x (lets say, nx) and y (lets say ny). The number of lines in p (np) has to be np=nx*ny. But this is how I stated the problem..

so it's ok.
Fabulous! It is a very clever awk script btw.

I thought that the length of x, y, and p were arbitrary and that the it was just sorted right to left The perl script I wrote handles any length file x, y, and p and sorts them right to left.

Cheers,
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Merge different files into the original file

Hello Below is my requirement I have 3 files A1.txt , A2.txt and A3.txt . A2 is dynamically generating file I want the merge of A1,A2 and A3 in A2.txt Could you please help? (3 Replies)
Discussion started by: Pratik4891
3 Replies

2. UNIX for Dummies Questions & Answers

How to merge two files into third file?

Hi All, i have a requirement as below. There are two files. In 1st file a.txt i have four lines as below Ramesh Suresh Pradeep Franklin In 2nd file b.txt i have 5 lines as below Francis Elizabeth David John Ravi The output file suppose c.txt should contain 1st line of... (5 Replies)
Discussion started by: sureshk_85
5 Replies

3. Shell Programming and Scripting

Merge two files into one file

Hi, I need help with merging two files. My requirement is as below: File 1: MachineA MachineB File 2: Process1 Process2 Desired File: MachineA Process1 MachineB Process2 If file 2 contains only one entry Process1, then second line in the desired output should be: MachineA Process1... (1 Reply)
Discussion started by: chiru_h
1 Replies

4. UNIX for Dummies Questions & Answers

merge files along with file names (awk)?

Dear programmers, I have a question about conditionally merging multiple files and having their file names in the first column. Input files: file.1.extension file.2.extension file.3.extension file.4.extension ... file.1000.extension where each file looks like this (with multiple lines):... (5 Replies)
Discussion started by: wei.deng
5 Replies

5. Programming

Merge files from /etc to one file using C

Hi guys, I have a question which might be easy to answer but I don't how to do it. The thing is I need to make a program in C which creates a file with all the content from the files in \etc. I'm not new to C language but to UNIX. I've read somewhere I need to use functions like f_read... (2 Replies)
Discussion started by: sussil
2 Replies

6. Shell Programming and Scripting

merge two files into one file use awk

Hi, guys. I have one question: I have two files: passwd and shadow (the number of records in these files are not equal)the contents of them are below: passwd: ************** ftp:x:24:24: sshd:x:71:65: uucp:x:10:14: brownj:x:5005:1000: sherrys: x :5006:1000: ... ************* ... (2 Replies)
Discussion started by: daikeyang
2 Replies

7. Shell Programming and Scripting

Merge two files whose names are given in other file

Hi, I have a pointer file ptr.txt. There may be any number of files mentioned in the ptr.txt file eg: cat ptr.txt /home/abc.txt /home/pqr.txt /home/xyz.txt I have to read this pointer file and merge the files given in the pointer file so that final file say... (1 Reply)
Discussion started by: harshada
1 Replies

8. Shell Programming and Scripting

merge two files in one file

All, I've basic knowlege on understanding UNIX Shell Programming. Right now I need to write a script for the following requirement. Kindly help me or suggest me how to write a Shell script. I've 8 .csv files that are containing "Detail" records. Each file getting more than 1 million. Another... (3 Replies)
Discussion started by: nvkuriseti
3 Replies

9. Shell Programming and Scripting

merging two file in an ordered way

actually, it seems somewhat confusing.. let me clearify it i want a file having all the attributes produced by ls -lc command. i want to add one more thing i.e. time of last access to a file attribute. so how can i merge these two things in a single file in a columnar way. i tried with these... (2 Replies)
Discussion started by: raku05
2 Replies
Login or Register to Ask a Question