printing 3 files side by side based on similar values in rows


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting printing 3 files side by side based on similar values in rows
# 1  
Old 12-18-2010
printing 3 files side by side based on similar values in rows

Hi I'm trying to compare 3 or more files based on similar values and outputting them into 3 columns.

For example:
file1
ABC
DEF
GHI

file2
DEF
DER

file3
ABC
DER

The output should come out like this
Code:
file1     file2     file3
ABC              ABC
DEF    DEF         
GHI
           DER    DER

I know how to merge the 3 files into one but I don't know how to get the logic needed to output the above.
# 2  
Old 12-18-2010
Matches your example, maybe should be adapted to your exact needs :
bash code:
  1. #!/bin/bash
  2. cat file{1..3} | sort -u | while read
  3. do
  4.    for F in file{1..3}; do
  5.       printf "%-10s" "$(grep "$REPLY" $F)"
  6.    done
  7.    echo
  8. done
Output:
Code:
ABC                 ABC       
DEF       DEF                 
          DER       DER       
GHI

# 3  
Old 12-18-2010
Working on it for you in perl.

Do the files have the same number of lines in them and are there any commas, tabs, or special characters within the files? Thanks, John

---------- Post updated at 03:52 PM ---------- Previous update was at 03:31 PM ----------

If you still need a solution, let me know. However, it looks like frans has a shorter solution than my perl script. jjarrettc
# 4  
Old 12-18-2010
Thanks a lot for your help guys! I'll try to customize it to fit what i need
# 5  
Old 12-20-2010
Code:
my $n=0;
my @tmp = glob("*.txt");
for(my $i=0;$i<=$#tmp;$i++){
  my $file = $tmp[$i];
  open FH,"<$file";
  while(<FH>){
    chomp;
    if(exists $hash{$_}){
     my @t = @{$hash{$_}->{VAL}};
     for(my $j=$#t+1;$j<=$i-1;$j++){
      push @{$hash{$_}->{VAL}},0;
     }
     push @{$hash{$_}->{VAL}},1;
    }
    else{
     $hash{$_}->{SEQ}=$n++;
     push @{$hash{$_}->{VAL}},1;
   }
}
  close FH;
}
foreach my $key (sort {$hash{$a}->{SEQ} <=> $hash{$b}->{SEQ}} keys %hash){
  my @tmp = @{$hash{$key}->{VAL}};
  my @t = map {my $tmp=($_ == 1)?$key:" ";$tmp;} @tmp;
  print join ",", @t;
  print "\n";
}

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Import 2 columns from 8 .csv files into pandas df (side by side) and write a new csv

I have 8 .csv files with 16 columns and "n" rows with no Header. I want to parse each of these .csv and get column and put the data into a new.csv. Once this is done, the new.csv should have 16 columns (2 from each input.csv) and "n" rows. Now, I want to just take the average of Column from... (3 Replies)
Discussion started by: Zam_1234
3 Replies

2. Shell Programming and Scripting

Merging two text files side by side

Hi everyone, I need to merge two files side by side The files look something like this: HOSTNAME fishtornado-K52F 127.0.1.1 UPTIME 20:17:01 up 2:19, 3 users, load average: 0.00, 0.04, 0.05 DISK USAGE (Size/Used/Avail/Use%) 29G 6.5G 21G 25% RUN QUEUE PID COMMAND USER ... (4 Replies)
Discussion started by: FishTornado
4 Replies

3. UNIX for Dummies Questions & Answers

Paste many files together side by side

Hi, Thank you for your help in advance :D. I have thousands of files like... file01 file02 file03 . . . file6324 I would like to paste every other file side by side so it looks like file01 file02 file03 file04 ...e.t.c file6323 file6324 (3 Replies)
Discussion started by: shaz1990
3 Replies

4. Shell Programming and Scripting

Combining two single column files side-by-side

Hi, I am looking for a sed/awk script to join two large (~300 M) single column files (one is sorted and the other is not sorted) side-by-side. I have a shell script but its taking ages to do the task so looking for an optimized fast solution. The two files look like: File1 (sorted) a1... (1 Reply)
Discussion started by: sajal.bhatia
1 Replies

5. Shell Programming and Scripting

AWK to merge multiple files side by side

I have about 100s of files of type text in a known directory. I want to merge all files side by side. Number of lines in all the files will remain same. For example file1 contains cat dog File 2 contains rat mat Output file should be cat rat dog mat Using awk I was able to... (5 Replies)
Discussion started by: kanthrajgowda
5 Replies

6. Shell Programming and Scripting

Paste two file side by side together based on specific pattern match problem

Input file_1: P78811 P40108 O17861 Q6NTW1 P40986 Q6PBK1 P38264 Q6PBK1 Q9CZ49 Q1GZI0 Input file_2: (6 Replies)
Discussion started by: patrick87
6 Replies

7. Web Development

Cannot access Apache web server from Wan side, only Lan side.

I have installed WAMPSERVER 2.0 on my windows vista x64 system but still am having issues with getting the webserver to be seen outside my local network. It is working fine within my local network. Been through several setup tutorials so far, no dice still. For testing purposes I have... (1 Reply)
Discussion started by: davidmanvell
1 Replies

8. Shell Programming and Scripting

How to Merge / combine / join / paste 2 text files side-by-side

I have 2 text files, both have one simple, single column. The 2 files might be the same length, or might not, and if not, it's unknown which one would be longer. For this example, file1 is longer: ---file1 Joe Bob Mary Sally Fred Elmer David ---file2 Tomato House Car... (3 Replies)
Discussion started by: cajunfries
3 Replies

9. Shell Programming and Scripting

Script to place selected columns from a group of files side by side in a new file

Hi Everyone, I need a shell/perl script to bring selected columns from all the files located in a directory and place them in a new file side by side. File1: a b c d 2 3 4 5 f g h i .......... File2: I II III IV w x y z .............. and so on many files are there...... (8 Replies)
Discussion started by: ks_reddy
8 Replies

10. Shell Programming and Scripting

How to print two sql query outputs side by side in excel

Hi, I have to sql queries like select sno,sname from temptable; select deptno,dname from depttable; In excel i want to specify the column number to which my output should be displayed. please help me in this... thanks in advance... (6 Replies)
Discussion started by: prasee
6 Replies
Login or Register to Ask a Question