How can 2 unsorted text files of different lengths be display side by side (in columns) in a shell
Given one.txt
and two.txt
:
$ cat one.txt
apple
pear
longer line than the last two
last line
$ cat two.txt
The quick brown fox..
foo
bar
linux
skipped a line
Display:
apple The quick brown fox..
pear foo
longer line than the last two bar
last line linux
skipped a line
paste one.txt two.txt
almost does the trick but doesn't align the columns nicely as it just prints one tab between column 1 and 2. I know how to this with emacs and vim but want the output displayed to stdout for piping ect.
The solution I came up with uses sdiff
and then pipes to sed to remove the output sdiff
adds.
sdiff one.txt two.txt | sed -r 's/[<>|]//;s/(\t){3}//'
I could create a function and stick it in my .bashrc
but surely a command for this exists already (or a cleaner solution potentially)?
Find below a python based solution.
Example
Using
*
in a format specification allows you to supply the field length dynamically.To expand a bit on @Hasturkun's answer: by default
pr
uses only 72 columns for its output, but it's relatively easy to make it use all available columns of your terminal window:Most shell's will store (and update) your terminal's screenwidth in the
$COLUMNS
environment variable, so we're just passing that value on topr
to use for its output's width setting.This also answers @Matt's question:
So, no:
pr
itself can't detect the screenwidth, but we're helping out a bit by passing in the terminal's width via the-w
option.