How can I convert a text file to columns like a newspaper?
You can use fold
to break the text up and then feed it to pr
. Both are most likely available in your system.
If this is the file lorem.txt
:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Integer malesuada nunc vel risus commodo viverra maecenas accumsan lacus. Nec feugiat nisl pretium fusce id velit ut tortor pretium. Lacus sed turpis tincidunt id. Nibh sit amet commodo nulla facilisi. In metus vulputate eu scelerisque felis. Id nibh tortor id aliquet.
$ fold -w 20 -s lorem.txt | pr -3
2020-06-25 16:41 Page 1
Lorem ipsum dolor Integer malesuada turpis tincidunt
sit amet, nunc vel risus id. Nibh sit amet
consectetur commodo viverra commodo nulla
adipiscing elit, maecenas accumsan facilisi. In metus
sed do eiusmod lacus. Nec feugiat vulputate eu
tempor incididunt nisl pretium fusce scelerisque felis.
ut labore et dolore id velit ut tortor Id nibh tortor id
magna aliqua. pretium. Lacus sed aliquet.
Check the pr
and fold
man pages for other options.
You can use fmt
to format paragraphs to the desired column width followed by pr
to arrange the columns. Both are POSIX utilities, although the GNU versions have more options than the POSIX minimum.
I don't understand how you want to balance columns, but this should get you started:
fmt -w 20 | pr -4 -t -w 80
Output:
Lorem ipsum tincidunt rutrum tincidunt. Etiam fermentum. Sed
dolor sit amet, varius. Nunc non metus ac quis volutpat
consectetur viverra ac erat id nibh vulputate felis. Donec turpis
adipiscing bibendum. Aenean semper. Proin felis, dignissim
elit. Mauris sit amet venenatis dapibus ullamcorper vel mollis nec,
tempus orci ut arcu. Morbi enim tortor, sed pellentesque
odio tincidunt, enim, pulvinar ultricies non odio. Aenean
vel hendrerit ante sed velit in, est euismod vitae sagittis
viverra. Aenean sollicitudin vel. Aliquam erat libero, vel egestas
mollis ex erat, tristique urna. In volutpat. diam. Nullam ornare
ac commodo lectus auctor ex vel purus quis eros
scelerisque diam sagittis, Phasellus at euismod, viverra
eget. Aenean at placerat lacus sem ornare, pretium turpis
sit amet purus sollicitudin. Sed suscipit leo in, rhoncus. Etiam
felis. Aenean sit a arcu dignissim, bibendum nulla. Sed sagittis lorem non
amet erat eget sodales odio ac, fermentum enim nisi molestie,
velit lobortis congue ante. Mauris id est feugiat, ut dictum risus
fermentum eget posuere lorem in commodo lectus rhoncus.
eget odio. Donec varius tempor
Both current answers use pr
, but column
also works:
$ fold -w 20 -s lorem.txt | column
Lorem ipsum dolor enim, pulvinar sed ornare, suscipit
sit amet, velit in, leo in, bibendum
consectetur sollicitudin nulla. Sed
adipiscing elit. tristique urna. In fermentum enim id
Mauris tempus orci auctor ex vel diam est feugiat, in
ut odio tincidunt, sagittis, at commodo lectus
vel hendrerit ante placerat lacus fermentum. Sed quis
viverra. Aenean sollicitudin. Sed a volutpat felis.
mollis ex erat, ac arcu dignissim, Donec turpis felis,
commodo lectus sodales odio ac, dignissim vel
scelerisque eget. congue ante. Mauris mollis nec,
Aenean sit amet posuere lorem pellentesque non
purus felis. Aenean varius tempor odio. Aenean vitae
sit amet erat eget tincidunt. Etiam sagittis libero,
velit lobortis non metus ac nibh vel egestas diam.
fermentum eget eget vulputate semper. Nullam ornare purus
odio. Donec Proin dapibus quis eros euismod,
tincidunt rutrum ullamcorper tortor, viverra pretium
varius. Nunc sed ultricies est turpis rhoncus.
viverra ac erat id euismod vel. Etiam sagittis
bibendum. Aenean Aliquam erat lorem non nisi
sit amet venenatis volutpat. molestie, ut dictum
arcu. Morbi enim Phasellus at sem risus rhoncus.
By default, it'll put as many columns as will fit in the current terminal width. You can specify a different width with -c
/--output-width
.