如何用 words/characters 将一行分成 2 行?

How can I split a line in 2 by words/characters?

我要转换:

Hello Hello Hi Hello Hello Hi Hi Hi Hi Hello

进入:

Hello Hello Hi Hello
Hello Hi Hi Hi Hi Hello

我想将一行分成 2 行,让它们具有尽可能接近的字符数,而不切断一个单词。

我想我可能可以用 wc -wwc -ccut、and/or awk,但也许你们可以提供一些更好的想法!

这可能是 fold 的工作,一个方便的换行工具:

$ s="Hello Hello Hi Hello Hello Hi Hi Hi Hi Hello"
$ fold -w $(( ${#s} / 2 + 1)) -s <<< "$s"
Hello Hello Hi Hello
Hello Hi Hi Hi Hi Hello

这使用 fold 将每行换行到给定的长度。我们如何计算长度?只需使用 ${#variable} 并除以 2(+1 以防止在长度为奇数时得到三行)。然后我们使用 -s 来防止断词。

来自man fold

fold - wrap each input line to fit in specified width

   -s, --spaces
          break at spaces

   -w, --width=WIDTH
          use WIDTH columns instead of 80