410gone.click

©2021 sumomo-99

[Linux] nlコマンドの基本的な使い方

更新日: 2021-04-11T08:14:06.280Z

Linux

nlコマンドは引数で指定したファイルや標準入力の内容に行番号を追加します。

nl - number lines of files

nlコマンドはGNU Coreutilsに含まれています。
ここでは、nlコマンドの基本的な使い方を紹介します。
 
※以降の実行例は、Ubuntu17.10で確認しています。

目次

  1. 基本的な使い方
  2. 1つのファイルに行番号を追加する
  3. 復数のファイルの内容に行番号を追加する
  4. 復数のファイルの内容に行番号を追加する(パス展開)
  5. 行番号を追加した内容を他のファイルに出力する
  6. 標準入力とファイルの内容を連結する
  7. 空白行にも行番号を追加する
  8. 行番号のフォーマットを変更したい

1. 基本的な使い方

nl [option]... [file]...

ファイルの指定がない場合は、標準入力から読み込みを行います。
デフォルトの設定では、復数のファイルも1つのドキュメントとみなして(結合して)行番号を追加します。
option説明-b, --body-numbering=style番号の表示条件にstyleを利用します。-d, --section-delimiter=cc論理的なページ分割の印としてccを利用します。-f, --footer-numbering=stylフッターの番号の表示条件にstyleを利用します。-h, --header-numbering=styleヘッダーの番号の表示条件にstyleを利用します。-i, --line-increment=number番号の増加量をnumberに設定します。-l, --join-blank-lines=number空白行を1行にまとめる単位を指定します。-n, --number-format=format挿入する番号のフォーマットを指定します。-p, --no-renumber領域ごとに番号の初期化を行いません。-s, --number-sprarator=string番号の後に、stringを追加します。-v, --starting-line-number=number各領域の初期番号を指定します。-w, --number-width=number番号を表示するための列数を指定します。--helpヘルプを表示します。--versionバージョンを表示します。

2. 1つのファイルに行番号を追加する

ファイルを1つだけ指定した場合、そのファイルの内容に行番号を追加します。デフォルト設定では、空白行に行番号は追加されません。

$ cat file1.txt
aaa

bbb
$ nl file1.txt
     1  aaa
     
     2  bbb

空白行を除く、テキストのある行にだけ、行番号が追加されました。

3. 復数のファイルの内容に行番号を追加する

復数のファイルを指定することで、ファイルの内容を連結して行番号を追加します。
ファイルごとに行番号を追加するのではなく、ファイルを結合した結果に連番で行番号を追加することに注意してください。
※ファイルごとに番号の初期値にリセットしない。

$ cat file1.txt
aaa

bbb
$ cat file2.txt
ccc
ddd
$ nl file1.txt file2.txt
     1  aaa

     2  bbb
     3  ccc
     4  ddd

2つのファイルを結合した結果に、行番号が連番として追加されました。

4. 復数のファイルの内容に行番号を追加する(パス展開)

bashのパス展開機能を使えば、このような書き方もできます。

$ nl *.txt
     1  aaa

     2  bbb
     3  ccc
     4  ddd

5. 行番号を追加した内容を他のファイルに出力する

nlコマンドで行番号を追加した内容を他のファイルに出力するには、リダイレクト(>)を利用します。

$ nl file1.txt file2.txt > file3.txt
$ cat file3.txt
     1  aaa

     2  bbb
     3  ccc
     4  ddd

6. 標準入力とファイルの内容を連結する

$ echo 'こんにちは' | nl - file1.txt
     1  こんにちは
     2  aaa

     3  bbb

echoコマンドの出力をパイプ'|'でnlコマンドの標準入力へ渡します。nlコマンドの'-'が標準入力を表しています。

7. 空白行にも行番号を追加する

nlコマンドのデフォルトでは空白行に行番号は追加されません。空白行にも行番号を追加するには、'-b'オプションで行番号を追加する書式を変更します。
-bオプションの値説明a全ての行に行番号を追加するt空白ではない行に行番号を追加する(デフォルト)n行番号を追加しないp正規表現にマッチした行に行番号を追加する
空白行に行番号を追加するには、'-b'オプションに'a'を指定します。

$ nl -b a file1.txt
     1  aaa
     2
     3  bbb

空白行にも行番号が追加されました。

8. 行番号のフォーマットを変更したい

nlコマンドのデフォルトでは、行番号を6桁の右寄せで追加します。桁数を変更するには'-w'オプション、位置を変更するには'-n'オプションを利用します。
-nオプションの値説明ln左寄せrn右寄せ(デフォルト)rz右寄せ、ゼロ表示

$ nl -n ln file2.txt
1       ccc
2       ddd
$ nl -n ln -w 4 file2.txt
1       ccc
2       ddd
$ nl -n rn file2.txt
     1  ccc
     2  ddd
$ nl -n rn -w 4 file2.txt
   1    ccc
   2    ddd
$ nl -n rz file2.txt
000001  ccc
000002  ddd
$ nl -n rz -w 4 file2.txt
0001    ccc
0002    ddd

'-s'オプションを利用することで、行番号とテキストの間のフォーマットも変更できます。デフォルトはTABとなっています。
次の実行例は、'-s'オプションで'_'を指定した例です。'-n'および'-w'オプションと組み合わせることで、行番号+区切り文字+テキストを連続して表示するようにしています。

$ cat file5.txt
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
jjj
kkk
$ nl -n ln -w 1 -s '_' file5.txt
1_aaa
2_bbb
3_ccc
4_ddd
5_eee
6_fff
7_ggg
8_hhh
9_iii
10_jjj
11_kkk

 
以上、nlコマンドの使い方の紹介でした。