文章を列で囲む

文章を列で囲む

文章を入手して梱包する方法を探しています。column私のシナリオでは、80文字の複数の文列があるので、そのようなものを使用することは私が望むものではありません。

これを行う方法はありますか?文章を一度だけすることは問題にならないことを指摘したいと思います。複数のタスクを同時に実行します。

2014年5月15日|金曜日|サーバーがダウンして中断されました。 Rickが誤ってサーバーをオフにしました。

私はそれを区別するために|を追加しました。しかし、各々は一定の長さに包装される。同時にお互いを尊重します。

答え1

について話しているかもしれませんfold

$ echo abcdefghijklmnop | fold -w 4
abcd
efgh
ijkl
mnop

From man fold(最も関連性の高いオプションのみを表示し、より多くのオプションがあります):

DESCRIPTION
   Wrap  input  lines in each FILE (standard input by default), writing to
   standard output.
   -s, --spaces
          break at spaces

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

答え2

次の単純なテキストフォーマッタがあります。FMMTほとんどのディストリビューションが付属しています。以前は、Vimがコマンドを発行する前に、以下を使用して内部でテキストを実行できましたgqfmtvi%!fmt

という代替案があるようです。基準しかし、私はこの分野に経験がありません。

fmtGNU coreutilsの一部のようです。

答え3

これはあなたが言うのですか?

$ cat temp
This is Some Long Text to Test
This is Also Some Long Text to Test
Final Call: Some Text to Complete This
$ INPUTS=""
$ FOLDWIDTH=5
$ FILENAME=temp
$ cat $FILENAME
This is Some Long Text to Test
This is Also Some Long Text to Test
Final Call: Some Text to Complete This
$ for i in $(seq 1 $(awk 'END{print NR}' $FILENAME))
> do
> INPUTS="$INPUTS <(awk 'NR==$i' $FILENAME | fold -w $FOLDWIDTH)"
> done
$ bash -c "paste $INPUTS"
This    This    Final
is So   is Al    Call
me Lo   so So   : Som
ng Te   me Lo   e Tex
xt to   ng Te   t to
 Test   xt to   Compl
         Test   ete T
                his

しかし、これは少しハッキング的です。特に、bash -c最終的なコマンドラインを解釈するためにサブプロセスを開始するために使用します。ファイルを1行ずつ解析し、各ファイルをファイル記述子として入力する別の方法を考えてみましたが、paste良い解決策が得られず、これに頼っていました。また、私の提案は、使用法がbash -c十分に明確でない場合はbashプロセスの置き換えを使用することです。

答え4

また、これを行うことができますsed

$ echo abcdefghijklmnop | sed 's/\(.\{4\}\)/\1\n/g'
abcd
efgh
ijkl
mnop

最後の空行を削除するには、

$ echo abcdefghijklmnop | sed 's/\(.\{4\}\)/\1\n/g' | sed '/^$/d'
abcd
efgh
ijkl
mnop

関連情報