How can I merge files on a line by line basis?
The right tool for this job is probably paste
paste -d '' file1 file2
See man paste
for details.
You could also use the pr
command:
pr -TmJS"" file1 file2
where
-T
turns off pagination-mJ
merge files, Joining full lines-S""
separate the columns with an empty string
If you really wanted to do it using pure bash shell (not recommended), then this is what I'd suggest:
while IFS= read -u3 -r a && IFS= read -u4 -r b; do
printf '%s%s\n' "$a" "$b"
done 3<file1 4<file2
(Only including this because the subject came up in comments to another proposed pure-bash solution.)
Through awk way:
awk '{getline x<"file2"; print $0x}' file1
getline x<"file2"
reads the entire line from file2 and holds into x variable.print $0x
prints the whole line from file1 by using$0
thenx
which is the saved line of file2.
paste
is the way to go. If you want to check some other methods, here is a python
solution:
#!/usr/bin/env python2
import itertools
with open('/path/to/file1') as f1, open('/path/to/file2') as f2:
lines = itertools.izip_longest(f1, f2)
for a, b in lines:
if a and b:
print a.rstrip() + b.rstrip()
else:
if a:
print a.rstrip()
else:
print b.rstrip()
If you have few number of lines:
#!/usr/bin/env python2
with open('/path/to/file1') as f1, open('/path/to/file2') as f2:
print '\n'.join((a.rstrip() + b.rstrip() for a, b in zip(f1, f2)))
Note that for unequal number of lines, this one will end at the last line of the file that ends first.