nl コマンド入門 - 行番号を付けて出力する
この記事でわかること
nlコマンド で行番号を付けて出力する方法が分かるnlとcat -nの 決定的な違い(空行の扱い)が分かる- 番号の 桁幅・区切り文字・開始番号・増分・書式 の変え方が分かる
- ログやソースの「何行目か」を すぐ伝えられる ようになる
結論(先に覚えるべき型)
- とりあえず番号を付けたい →
nl file - 空行にも番号を振りたい →
nl -b a file cat -nでも全行に番号は振れる(手軽さ優先ならこちら)
1. nl コマンドって何?
結論:
nl(number lines)はテキストの各行の先頭に行番号を付けて出力するコマンド。既定では空行に番号を振らない。
nl コマンドを使えば行番号を付けて表示してくれるよ。nl は number lines、つまり「行に番号を振る」の略なんだ。nl ファイル名 でいいよ。memo.txt という 3 行のファイルで試してみよう。
$ cat memo.txt
りんご みかん ぶどう
ここに nl を通すと、各行の先頭に番号が付く。
$ nl memo.txt
1 りんご
2 みかん
3 ぶどう
nl の基本
nl ファイル名 で、各行の先頭に 右寄せの行番号 が付く。番号と本文の間は タブ で区切られる。
2. nl と cat -n は何が違う?
結論: 最大の違いは空行の扱い。
nlは既定で空行に番号を振らないが、cat -nはすべての行に番号を振る。
cat -n でも付きますよね? 何が違うんですか?途中に空行が入った list.txt を用意する。
$ cat list.txt
赤 青 緑
まず nl を通すと、空行には番号が振られない。
$ nl list.txt
1 赤
2 青
3 緑
一方 cat -n は、空行も含めて全部の行に番号を振る。
$ cat -n list.txt
1 赤
2
3 青
4
5 緑
使い分けの目安
| やりたいこと | コマンド |
|---|---|
| 中身のある行だけ数えたい | nl file |
| 空行も含めて物理的な行数を数えたい | cat -n file |
| 番号の桁幅や書式を細かく変えたい | nl(オプション豊富) |
nl は「意味のある行」を数えてくれる感じなんですね。nl は番号の幅や区切り文字を細かく指定できるから、見た目を整えたいときにも強いよ。3. 空行にも番号を付ける:-b a
結論:
-b aを付けると空行を含めた全行に番号が振られる。-bは本文の番号付け方式(body)を指定するオプション。
空行にも番号を振りたいときは -b a を使う。a は all(すべての行)の意味。
$ nl -b a list.txt
1 赤
2
3 青
4
5 緑
-b で指定できる主な方式
-b a:すべての行に番号を振る(all)-b t:空行以外に番号を振る(既定値、t は text)-b n:番号を振らない(none)
-b t だから、何も付けないと空行が飛ばされるんですね。-b a を思い出して。4. 番号の見た目を整える:-w / -s
結論:
-wで番号の桁幅、-sで番号と本文の区切り文字を変えられる。既定は幅 6・区切りはタブ。
4-1. 桁幅を変える(-w)
既定では番号の幅は 6 桁分とられている。-w で幅を指定できる。
$ nl -w 3 memo.txt
1 りんご 2 みかん 3 ぶどう
4-2. 区切り文字を変える(-s)
番号と本文の間は既定でタブ。-s で好きな文字列に変えられる。
$ nl -s '. ' memo.txt
1. りんご
2. みかん
3. ぶどう
-s '. ' で「1. りんご」みたいに、箇条書きっぽくできるんですね。-w と -s を組み合わせると読みやすい一覧が作れるよ。5. 開始番号と増分を変える:-v / -i
結論:
-vで開始番号、-iで増分を指定できる。100 行目から始める・2 ずつ増やす、といった調整ができる。
5-1. 開始番号を変える(-v)
-v は番号の開始値。100 から始めたいときはこうする。
$ nl -v 100 memo.txt
100 りんご 101 みかん 102 ぶどう
5-2. 増分を変える(-i)
-i は 1 行ごとに増やす量。2 ずつ増やすには -i 2。
$ nl -i 2 memo.txt
1 りんご
3 みかん
5 ぶどう
-v と -i は組み合わせられる。nl -v 10 -i 10 memo.txt なら 10, 20, 30 と振られる。
6. ゼロ埋め・左寄せ:-n
結論:
-nで番号の書式を指定する。rzでゼロ埋め、lnで左寄せ、rn(既定)で右寄せ。
-n は番号の表示書式を決めるオプション。
$ nl -n rz -w 3 memo.txt
001 りんご 002 みかん 003 ぶどう
-n で指定できる書式
| 値 | 意味 |
|---|---|
rn |
右寄せ・ゼロ埋めなし(既定) |
rz |
右寄せ・ゼロ埋め |
ln |
左寄せ |
7. パイプで使う
結論:
nlはファイル名を省略すると標準入力を読む。他コマンドの出力にパイプでつないで行番号を付けられる。
ファイル名を渡さずパイプでつなぐと、前のコマンドの出力に番号を付けられる。
$ ls /etc | nl
1 hostname
2 hosts
3 passwd
grep の結果に nl をつないで「何件目か」を数えるのもよくやる使い方だよ。パイプ元に空行が含まれると、既定では空行に番号が振られない。件数を正確に数えたいときは -b a を付けるか cat -n を使うこと。
8. ミニ課題:実際にやってみよう
結論: ファイル作成・空行を含む番号付け・書式調整の 3 問で、
nlの基本を手で確かめる。
printf 'a\n\nb\n\nc\n' > sample.txt課題1: sample.txt に nl で行番号を付けて表示しよう(空行は番号なしでよい)。
ヒントを見る
ファイル名を渡すだけ。nl ファイル名。
解答例
$ nl sample.txt
課題2: 同じ sample.txt で、空行にも番号を振って表示しよう。
ヒントを見る
本文の番号付け方式を all にする -b a を使う。
解答例
$ nl -b a sample.txt
課題3: sample.txt の番号を 3 桁ゼロ埋め(001, 002, ...)で表示しよう。
ヒントを見る
書式 -n rz と桁幅 -w 3 を組み合わせる。
解答例
$ nl -n rz -w 3 sample.txt
9. コピペ用テンプレート
結論: 基本・全行番号・書式調整・パイプのよく使う型をまとめて手元に置いておく。
よく使う型をまとめておく
# 基本(空行以外に番号) nl file.txt # 空行も含めて全行に番号 nl -b a file.txt # 桁幅3・区切りをドットに nl -w 3 -s '. ' file.txt # 100行目から、2ずつ nl -v 100 -i 2 file.txt # 3桁ゼロ埋め nl -n rz -w 3 file.txt # パイプで他コマンドの出力に番号付け ls /etc | nl