これはどのように行うことができますか?
マニュアルに該当するオプションがありません。
1000万行後にインデントが壊れることを積極的に確認しました。
次のように確認できます。
$ (for i in `seq 0 10000000`; do echo "$i"; done) | nl
それほど多くの行を生成することはあまりありませんが、そのように途切れたくありません。これはどのように行うことができますか?
nl
が入力全体をバッファリングして、必要な最大数を測定することを提案している場合、これはストリームフィルタの精神ではまったくありません。まれな例外(たとえば、sort
)を除いて、コアユーティリティはストリームをすぐに処理しようとします。特に、実質的に無限のパイプラインで使用される可能性があるためです(たとえば、nl
そしてファイルにリダイレクトされると、かなりの量のデータが蓄積される可能性があります)。
パディングを処理する標準的な方法は、予想される最大幅をパラメーターとして指定することです。この場合、パディングをオフにするか(とにかくこれを好みます。前面にスペースで区切られた列を配置するのが理にかなっています)、別の幅を設定することができます。比較:
seq 0 10000000 | nl -w12 # default right-justify, 12 character width
seq 0 10000000 | nl -w1 # default right-justify, 1 character width (no padding)
seq 0 10000000 | nl -w1 -s' ' # right-justify, space delimited instead of tab
seq 0 10000000 | nl -nln # left-justify
本当にこれを自動的に実行したい場合は、wc -l
を使用して最初に長さを測定し、次に-w
を適切に設定します。
seq 0 10000000
は1,000万行と1行に拡張されており、値をループできるようにbash
はメモリに保存する必要があります。 Thatが壊れているので、システムのすべてのメモリとスワップを使い果たす前に、なんとか終了しました(最近のカーネルでは、メモリ不足で他のプロセスを強制終了したくありませんでした)どのプロセスを強制終了するかを正しく決定します)。
nl
をnl
またはcat
に置き換えるか、入力を読み取るその他のコマンドを使用して、wc
ではないことを確認できます。
muruのバージョンは、すべてのデータを中間に格納するためにbash
を必要とせずに同等である必要があります。
編集:それが数字のパディングに関するものである場合、マンページを10秒間読み取ると、nl -w
オプションが表示されると予想していました...nl -w8
を使用してください。 (デフォルトのタブが使用されているために)行番号と行の内容の間の大きなギャップに満足できない場合は、-s' '
;を追加できます。それはすべてマンページにあり、簡単に見つけることができます。しかし、なぜ質問のforループなのか疑問に思っています。