11

So I have some output that has very long lines, and I want to have it formatted to lines no more than 80 columns wide, but I don't want to split words because they are in the column limit.

I tried

sed 's/.\{80\}/&\n/g' 

but has the problem of splitting words and making some lines begin with a space.

I managed to do it with Vim, setting textwidth to 80, going to the beginnig of the file and executing gqG to format the text. But ¡ would rather do it with sed, awk or something similar to include it in a script.

Msegade
  • 582

3 Answers3

17

Use fold as follows:

fold -s -w80 file

This will only split at whitespace (-s), using a line width of 80 characters (-w80). So it does exactly the same as the fmt solutions, but it also allows to break at any character when omitting the -s option.

tanius
  • 874
  • 2
    This is the best answer considering fmt merges separate lines by eating new lines. –  Jul 26 '18 at 01:10
13

Use fmt instead:

fmt --width=80 file

From man fmt:

-w, --width=WIDTH
              maximum line width (default of 75 columns)
cuonglm
  • 153,898
3

Below mentioned solution might help:

cat file_name.txt | fmt -w 80 > reduced_file_name.txt

fmt - simple optimal text formatter.

Anshul Patel
  • 651
  • 5
  • 11