views:

32

answers:

3

Hi,

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.

A: 

You can use the printf utility to create formatted output, using the same format specifiers as printf. With the format specifiers, you can specify a minimum field width. For example:

printf "%30s%30s\n" "Alpha" "Bravo"
Michael Aaron Safyan
A: 

Try using printf to print your data into fixed-width fields before passing it to paste (make sure the field is as long as the longest value)

bta
+3  A: 

Check out the column utility...

$ echo -e "a\nb\ncccccccccccc\nd" | paste - - | column -t
a             b
cccccccccccc  d
Robert Wohlfarth
Perfect. THank you.
nn