このファイルが与えられたら:
$ cat file
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lima mike
november oscar papa quebec romeo sierra tango
uniform_victor_whiskey_xray yankee zulu
70歳になったら突破したりもしたり、サプリメントも頑張りたいです。 「折りたたみ」を試しましたが、再度埋められませんでした。
$ fold -w 70 file
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lim
a mike
november oscar papa quebec romeo sierra tango
uniform_victor_whiskey_xray yankee zulu
「fmt」は再入力されますが、スペースでのみ区切ることができるため、正確に70の改行は保証されません。
$ fmt file
alfa bravo charlie delta echo foxtrot golf hotel india juliet
kilo lima mike november oscar papa quebec romeo sierra tango
uniform_victor_whiskey_xray yankee zulu
「pr」を試しましたが、改行なしで行だけ切り捨てられたようです。
$ pr -t -W 70 file
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lim
november oscar papa quebec romeo sierra tango
uniform_victor_whiskey_xray yankee zulu
たぶん、このコマンドに私が見逃したいくつかのオプションがあるかもしれません、またはAwkまたはSedソリューションがあるかもしれません。私はより重いソリューション(Perl PHP Ruby)を避けたいと思います。
答え1
sedを使う
GNU sedの使用:
$ sed -zE 's/\n/ /g; s/.{70}/&\n/g; s/$/\n/' file
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lim
a mike november oscar papa quebec romeo sierra tango uniform_victor_wh
iskey_xray yankee zulu
POSIX sedの場合:
sed -zE 'H;1h;$!d;x; s/\n/ /g; s/.{70}/&\n/g; s/$/\n/' file
awkを使う
$ awk '{r=(length(r)?r" "$0:$0); while(length(r)>70){print substr(r,1,70); r=substr(r,71)}} END{print r}' file
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lim
a mike november oscar papa quebec romeo sierra tango uniform_victor_wh
iskey_xray yankee zulu
trとフォールドの使用
$ tr '\n' ' ' <file | fold -w 70
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lim
a mike november oscar papa quebec romeo sierra tango uniform_victor_wh
iskey_xray yankee zulu
上記のコードは末尾の改行を生成しませんが、必要に応じて追加できますecho ""
。
tr '\n' ' ' <file | fold -w 70; echo
答え2
これはすべての状況で動作するわけではありませんが、ほとんどのユースケースに適用されます。
$ fmt -w 2500 file | fold -w 70
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lim
a mike november oscar papa quebec romeo sierra tango uniform_victor_wh
iskey_xray yankee zulu