cat -n file
出力にはfile
行番号がありますが、番号付けを開始する行をどのように指定しますか?これを実行できるコマンドはありますか?
このプロセスを複数のコマンドに分割することを考えました。N
行番号付けをテキストファイルの行から始めるには、次のようにfile.txt
します。
- 最初の
N-1
行を印刷してください。head -$((N-1)) file.txt
- 番号付きの残りの
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