特定の行から番号付きのファイルを出力するコマンドがありますか?

特定の行から番号付きのファイルを出力するコマンドがありますか?

cat -n file出力にはfile行番号がありますが、番号付けを開始する行をどのように指定しますか?これを実行できるコマンドはありますか?

このプロセスを複数のコマンドに分割することを考えました。N行番号付けをテキストファイルの行から始めるには、次のようにfile.txtします。

  1. 最初のN-1行を印刷してください。head -$((N-1)) file.txt
  2. 番号付きの残りのN行を印刷します。tail -n N file.txt | cat -n

ただし、入力がから来る場合、2番目のステップは不可能ですstdin。最初のステップはすべてを消費します。 AFAIKを読み取って削除するには、一時ファイルを作成する必要があります。

答え1

awkを使用してこれを行うことができます。

awk 'NR >= n { printf("%6d  ", NR-n+1) } 1' n=3

現在のレコード番号(NR)がn以上の行(変数として渡される)に対して1ベースの行プレフィックスを印刷します。1最後は現在の行を印刷するためのawkの略語です。

head(1)必要な行数を読み取ると入力消費が停止されるため、引き続き使用できます。

{ head -$((N-1)); cat -n; }

ファイルにパイプをリンクするか、ファイルをリダイレクトできます。

cat foo | { head -$((N-1)); cat -n; }
{ head -$((N-1)); cat -n; } < foo

関連情報