`nl` 呼び出しは、番号付け前にすべての入力を吸収します。

`nl` 呼び出しは、番号付け前にすべての入力を吸収します。

これはどのように達成できますか?

マニュアルに適用可能なオプションは表示されません。

1,000万行後にインデントが壊れるかを積極的に確認してみました。

次のように確認できます。

$ (for i in `seq 0 10000000`; do echo "$i"; done) | nl

このように多くの行を頻繁に生成することはありませんが、以前のように破損することは望ましくありません。これはどのように達成できますか?

ベストアンサー1

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適切な設定を指定します。

おすすめ記事