Visit Our UNIX and Linux User Community


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


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to Merge / combine / join / paste 2 text files side-by-side
# 1  
Old 04-27-2009
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
Elephant

All I want is to paste them side-by side into a new file like so:
No logic, no matching - just a simple paste, with a simple tab formatting to separate the 2 columns.

---file3
Joe Tomato
Bob House
Mary Car
Sally Elephant
Fred
Elmer
David

I've tried the "paste" command, like "paste file1 file2 > file3" but it works works only if file1 is longer than or the same length as file2. If file2 is longer, the extra values are misaligned too far over to the left and appear to belong to file1 as follows:

---file3
Tomato Joe
House Bob
Car Mary
Elephant Sally
Fred
Elmer
David

Also tried this awk I found in the forums, but it works only if file1 is longer or same length as file2 - it truncates file2 if file1 is shorter.
Code:
awk 'NR==FNR{_[NR]=$0;next}{print $1,$2,_[FNR]}' file2 file1

---file3
Tomato Joe
House Bob
Car Mary
Elephant Sally

I don't care if the solution is awk, sed, shell script, or what.
Reading both files into an array might be the solution, but I don't know enough on how to write the code for that.

Any help is greatly appreciated, thanks!
# 2  
Old 04-27-2009
Quote:
Originally Posted by cajunfries
...
All I want is to paste them side-by side into a new file like so:
No logic, no matching - just a simple paste, with a simple tab formatting to separate the 2 columns.
...
Also tried this awk I found in the forums, but it works only if file1 is longer or same length as file2 - it truncates file2 if file1 is shorter.
...

Take a look at awk's printf :

Code:
awk 'NR==FNR { a[c=FNR]=$0; next }
     { printf "%-8s\t%s\n", a[FNR], $0 } 
     END { for(i=FNR+1;i<=c;i++) print a[i] }' file2 file1

# 3  
Old 04-27-2009
yes!!

Thanks rubin!!

That works perfectly - regardless as to which of the 2 files is longer.

Exactly what I've been looking for. (Now if I could just understand it)

Thanks again!!
# 4  
Old 04-27-2009
Code:
NR==FNR { a[c=FNR]=$0; next }
{ printf "%-8s\t%s\n", a[FNR], $0 }  

This part is similar to the code you posted, there are many threads here that explain it, you can search the forums using the keyword NR==FNR.
Regarding printf, check this: The GNU Awk User's Guide

Code:
END { for(i=FNR+1;i<=c;i++) print a[i] }'

This last section will print the remaining records of the file that has more records, already stored at the NR==FNR part, and it'll start after
all records of the smaller file are exhausted. This part will get executed only if say file2  has more records than file1, otherwise it won't
run at all.

Hope I made it clear Smilie.

Previous Thread | Next Thread
Test Your Knowledge in Computers #1003
Difficulty: Medium
In the 1970s, Grace Hopper, also known as "Grandma COBOL", pushed for the Defense Department to replace large, centralized systems with networks of small, distributed computers.
True or False?

10 More Discussions You Might Find Interesting

1. 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

2. 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

3. 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

4. Shell Programming and Scripting

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 file1 file2 file3 ABC ABC (4 Replies)
Discussion started by: zerofire123
4 Replies

5. 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

6. 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

7. Shell Programming and Scripting

Merge 3 columns side by side

I know this is a stupid question for you guys! half day googling and i got nothing :( i have 3 variables/files, say: $X1 or file1: # there is one whitespace space after each line | 21 | 9 | 28 | 100 | 51 $X2 or file2: # there is one whitespace space... (7 Replies)
Discussion started by: amaulana
7 Replies

8. Shell Programming and Scripting

Merge 2 text files to one text file side by side

Inquiring minds want to know.... I need to take two files that I have latitude and longitude values and then combine them into one file with the values side by side separated by a space. the first file is temp113-lat.txt and the second is temp113-lon.txt. They each have values listed in the... (15 Replies)
Discussion started by: ahinkebein
15 Replies

9. Shell Programming and Scripting

How to Merge Two .xls files side by side into a single .xls

Hi all, please help me out in below requirement. I have two .xls files say abc.xls and bbc.xls , i want to merge these two files into a single file ..say xyz.xls side by side Ex: abc.xls bbc.xls Eno Ename Eno Ename 101 hello ... (2 Replies)
Discussion started by: jagadish99
2 Replies

10. Shell Programming and Scripting

How to Merge Two .xls files side by side into a single .xls

Hi all, please help me out in below requirement. I have two .xls files say abc.xls and bbc.xls , i want to merge these two files into a single file ..say xyz.xls side by side Ex: abc.xls Eno Ename 101 hello 102 hero 103 india bbc.xls Eno Ename 201 delhi 202 Hyd 203... (0 Replies)
Discussion started by: jagadish99
0 Replies

Featured Tech Videos