文章を入手して梱包する方法を探しています。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
答え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