【nl】bash/シェルスクリプトマニアックコマンドあれこれ11

nlコマンド

nl コマンドは、テキストファイルを行番号付きで出力するコマンドです。
cat -n コマンドでも行番号を付けることができますが、nl コマンドでは、正規表現など、より細かい設定が可能です。

行番号をつける

ファイルに行番号を追加するには、ファイルの名前をnl コマンドに渡すだけです。
デフォルトでは、ファイルのすべての行に行番号が追加されます。例として、以下の出力を参照してください。

bash-5.1$ nl distros.txt
     1	AlmaLinux
     2	Arch Linux
     3	CentOS
     4	Debian
     5	Fedora
     6	Gentoo
     7	Manjaro
     8	openSUSE
     9	Red Hat
    10	Ubuntu
bash-5.1$

これはこれで非常に便利なのですが、デフォルトでは、出力にタブ文字、行番号、がテキストの前に追加されました。
これは、特定のデータ文字列がどの行に表示されるかをすばやく確認するための優れた方法です。
しかし、他の状況ではあまり役に立たないかもしれません。
この出力のフォーマットを変更する方法を以下に示します。

行番号の書式を変更する

書式を少し変更してみます。
行番号をフォーマットする一般的な方法の 1つは、番号の後にピリオドを置くことです。
nl -s のように-sオプションを使用します。

bash-5.1$ nl -s ". " distros.txt
     1. AlmaLinux
     2. Arch Linux
     3. CentOS
     4. Debian
     5. Fedora
     6. Gentoo
     7. Manjaro
     8. openSUSE
     9. Red Hat
    10. Ubuntu
bash-5.1$

行番号の手前のスペースを調整

行番号前のスペースを調整したい場合、nl -w (width) オプションで調整することができます。
スペースを完全に取り除くには、nl -w1 (幅1)を指定します。
-sオプションを引き続き使用していることに注意してください。
これにより、両方の書式設定の変更が反映されます。

bash-5.1$ nl -w3 -s ". " distros.txt
  1. AlmaLinux
  2. Arch Linux
  3. CentOS
  4. Debian
  5. Fedora
  6. Gentoo
  7. Manjaro
  8. openSUSE
  9. Red Hat
 10. Ubuntu
bash-5.1$

開始番号を指定する

1 以外の番号から番号付けを開始したい場合は、-vオプションをnlと共に使用して、別の番号を指定できます。
例として、行番号を 100 から開始します。

bash-5.1$ nl -v100 -w3 -s ". " distros.txt
100. AlmaLinux
101. Arch Linux
102. CentOS
103. Debian
104. Fedora
105. Gentoo
106. Manjaro
107. openSUSE
108. Red Hat
109. Ubuntu
bash-5.1$

catコマンドで頑張ってみる

もちろん、cat こまんどでもできますが、調整はパイプで繋いでsed を使うなどするしかありません。

bash-5.1$ cat -n distros.txt
     1	AlmaLinux
     2	Arch Linux
     3	CentOS
     4	Debian
     5	Fedora
     6	Gentoo
     7	Manjaro
     8	openSUSE
     9	Red Hat
    10	Ubuntu
bash-5.1$

awkコマンドで頑張ってみる

cat -n コマンドでの実現で、微調整にsedコマンドが必要なのであれば、最初からsedコマンドで行う方法もあります。

bash-5.1$ awk '{print NR, $0}' distros.txt
1 AlmaLinux
2 Arch Linux
3 CentOS
4 Debian
5 Fedora
6 Gentoo
7 Manjaro
8 openSUSE
9 Red Hat
10 Ubuntu
bash-5.1$
ヒント
やり方は無限にあります。
解決方法は1つではありませんので、色々考えて見てください。

書籍の紹介

【set -x】bash/シェルスクリプトマニアックコマンドあれこれ12

【set -x】bash/シェルスクリプトマニアックコマンドあれこれ12

【comm】bash/シェルスクリプトマニアックコマンドあれこれ10

【comm】bash/シェルスクリプトマニアックコマンドあれこれ10