Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to line up columns using paste(1)? or how to make an aligned table merging lines in the shell?

I want to merge lines such that the merged lines are aligned on the same boundary. UNIX paste(1) does this nicely when lines all meet at the same tab boundary, but when lines differ in size (in the file that lines are being merged into), the text comes out awkward.

Example of paste(1) that has the desired effect:

$ echo -e "a\nb\nccc\nd" | paste - -
a       b
ccc     d

Example of paste(1) with undesired effect:

$ echo -e "a\nb\ncccccccccccc\nd" | paste - -
a       b
cccccccccccc    d

Note how the 2nd column doesn't line up. I want 'b' to line up with 'd', which requires an additional tab. Unfortunately I believe this is the limit for the paste utility, so if anyone has any idea of how to get the desired effect above, I'd love to hear it.

like image 747
snap Avatar asked Feb 04 '23 04:02

snap


1 Answers

Check out the column utility...

$ echo -e "a\nb\ncccccccccccc\nd" | paste - - | column -t
a             b
cccccccccccc  d
like image 146
Robert Wohlfarth Avatar answered Feb 05 '23 20:02

Robert Wohlfarth