Linuxの行番号付けコマンド「nl」の使い方完全ガイド:catとの違いや便利なオプションも紹介!

Linuxでテキストファイルを扱う際、「行番号を付けて表示したい」と思ったことはありませんか?
そんなときに役立つのが「nlコマンド」です。cat -nと似たようなことができるコマンドですが、より細かい制御が可能です。
この記事では、nlコマンドの基本的な使い方から、よく使われるオプション、そしてcatとの違いまで、わかりやすく解説します。
Linux初心者の方から中級者の方まで、日常的な作業にすぐに活かせる内容ですので、ぜひ参考にしてください。


nlコマンドとは?

nlコマンドは、指定したファイルまたは標準入力の各行に自動で行番号を付けて出力するLinux標準のコマンドです。
ファイルの内容を確認するときや、プログラムの行番号を表示したいときなど、意外と活躍の場面は多くあります。

コマンド名の「nl」は、「number lines(行に番号を付ける)」の略です。
シンプルながらも、柔軟な行番号付けができる点が特徴です。


基本的な使い方

まずは最もシンプルな使い方から見てみましょう。

nl ファイル名

たとえば「sample.txt」というファイルが以下のような内容だった場合:

Hello world
This is a test.
Another line.

このファイルに対して nl sample.txt を実行すると、以下のように出力されます:

     1	Hello world
2 This is a test.
3 Another line.

デフォルトでは、空行には行番号を付けない仕様になっています。
この点が、cat -nとの大きな違いです(cat -nは空行にも番号を付けます)。


空行にも行番号を付けたい場合

空行にも番号を付けたい場合は、-baオプションを使います。

nl -ba sample.txt

このようにすると、空行を含めてすべての行に番号が振られます。

オプションの意味:

  • -b は「ボディセクションの番号付けスタイル」を指定
  • a は「すべての行(all)」を対象にする

番号のフォーマットを変更する:-nオプション

デフォルトでは、右寄せ(右詰め)の行番号が出力されます。
これを変更したい場合は -n オプションを使います。

オプション説明
-n ln左詰め(left justified)
-n rn右詰め(right justified)※デフォルト
-n rzゼロパディング(zero-padded)

例:

nl -n ln sample.txt   # 行番号を左詰め
nl -n rz sample.txt # ゼロパディング(001、002のように表示)

行番号の開始値を変える:-vオプション

nlコマンドは、デフォルトでは「1」から行番号を付け始めます。
-vオプションを使えば、任意の数値から始められます。

nl -v 100 sample.txt

この例では、行番号が100から始まります。


行番号の増分を指定する:-iオプション

通常は1行ごとに1ずつ番号が増えますが、-iで増分を指定することも可能です。

nl -i 10 sample.txt

この場合、行番号は10, 20, 30…となって表示されます。


行番号の桁数を指定する:-n rz と -w の組み合わせ

-wオプションで行番号の幅を指定できます。たとえば3桁でゼロ埋めしたい場合:

nl -n rz -w 3 sample.txt

出力例:

001	Hello world
002 This is a test.
003 Another line.

ヘッダー・ボディ・フッターごとの番号付け制御

nlコマンドは、実は「ヘッダー(header)」「ボディ(body)」「フッター(footer)」という3つのセクションを認識します。

各セクションに対して番号付けを制御できるのが特徴です。

セクションの指定:

  • -b(body)
  • -h(header)
  • -f(footer)

例えば:

nl -b a -h n -f n sample.txt

この例では、

  • ボディ(本文)にはすべての行に番号を付ける
  • ヘッダーとフッターは番号を付けない(n

セクションを自動で判断するには、デリミタを使います。デフォルトでは次のように扱われます:

  • \:\:\: … header と body の区切り
  • \:\: … body と footer の区切り

これらを自動判別させるケースは少ないかもしれませんが、スクリプト処理には便利です。


cat -nとの違い

nlと似た機能を持つコマンドに「cat -n」があります。
この2つは一見似ていますが、細かな違いがあります。

比較項目nlcat -n
空行への行番号付けない(デフォルト)付ける(常に)
行番号形式制御可能(-nで指定)一律右詰め
増分変更可能(-i不可
開始番号変更可能(-v不可
セクション制御あり(header/body/footer)なし
柔軟性高いシンプル

まとめると、カスタマイズ性が高いのがnl
**シンプルで手軽に使えるのがcat -n**です。


実践例:スクリプト処理での活用

ログファイルの解析や、ソースコードの簡易表示など、nlはさまざまな場面で使えます。

例1:grepと組み合わせて使う

nl -ba error.log | grep "Exception"

→ 行番号付きで、エラー行のみを抽出できます。

例2:出力をファイルに保存

nl -n rz -w 4 source.txt > numbered_source.txt

→ 行番号を付けたソースファイルを新規ファイルとして保存可能です。


まとめ

nlコマンドは、行番号を付けたいときに便利なLinux標準コマンドです。
一見シンプルですが、以下のような強力なオプションがそろっています:

  • 空行の扱いを制御する -b
  • 開始番号 -v
  • 増分 -i
  • 表示形式 -n-w

cat -nよりも柔軟にカスタマイズできるため、スクリプトやログ処理などにも活用できます。
これからLinuxを使いこなしていきたい方は、ぜひこのnlコマンドも自分のツールボックスに加えてみてください。

タイトルとURLをコピーしました