0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

nlコマンドAdvent Calendar 2020

Day 4

行番号のフォーマットを変更するnlコマンドのnオプション

Last updated at Posted at 2020-12-03

nlコマンドはnオプションを指定することで、行番号のフォーマットを変更することができます。変更できる書式は「左詰め」「右詰め」「ゼロ埋め」の3つです。

#nオプションの使い方

まずはマニュアルを参照してみましょう。

info nl (GNU coreutils)

‘-n FORMAT’
‘--number-format=FORMAT’
     Select the line numbering format (default is ‘rn’):

     ‘ln’
          left justified, no leading zeros;
     ‘rn’
          right justified, no leading zeros;
     ‘rz’
          right justified, leading zeros.

man nl (BSD)

     -n format    Specify the line numbering output format.  Recognized format
                  arguments are:
                  ln      Left justified.
                  rn      Right justified, leading zeros suppressed.
                  rz      Right justified, leading zeros kept.

                  The default format is rn.

つまり、-nの後に

ln:左詰め
rn:右詰め(デフォルト)
rz:右詰めゼロ埋め

のいずれかを指定すればいいことがわかりますね。-nを指定しないときは-n rnが指定されたのと同じ動きになります。また、coreutilsのnlではロングオプション形式もサポートしており-n ln--number-format=lnと指定することもできます。わざわざ長いオプションを書くのは面倒ですが、何のオプションなのか明確になるので可読性は向上します。
そしてマニュアルを読む限りにおいて、これら2つの実装は-nの機能差はありません。しかしbusyboxのnlは残念ながら-nのオプションそのものをサポートしていません。

POSIX

せっかくなので、フォーマットに関しては標準ドキュメントであるPOSIX(IEEE Std 1003.1-2017)も眺めてみましょう。

STDOUT
The standard output shall be a text file in the following format:

"%s%s%s", <line number>, <separator>, <input line>

where <line number> is one of the following numeric formats:

%6d
When the rn format is used (the default; see -n).
%06d
When the rz format is used.
%-6d
When the ln format is used.
<empty>
When line numbers are suppressed for a portion of the page; the is also suppressed.
In the preceding list, the number 6 is the default width; the -w option can change this value.

出典:https://pubs.opengroup.org/onlinepubs/9699919799/utilities/nl.html

C言語のフォーマット指定子によって、出力は<line number> <separator> <input line>の3つの文字列の組み合わせ%s%s%sであると記載されています。そして、<line number>%6d %06d %-6dといずれも10進の符号付き整数であり、デフォルトでは6桁となっているようです。

nオプションを試す

前置きが少々長くなってしまいましたが、それでは最初の記事で使用したテキストファイル「utl-kita」で実際に試してみましょう。

左詰め

$ nl -n ln utl-kita
1     	東京
2     	上野
3     	尾久
4     	赤羽
5     	浦和
6     	さいたま新都心
7     	大宮

右詰め(デフォルト)

$ nl -n rn utl-kita
     1	東京
     2	上野
     3	尾久
     4	赤羽
     5	浦和
     6	さいたま新都心
     7	大宮
$ nl utl-kita
     1	東京
     2	上野
     3	尾久
     4	赤羽
     5	浦和
     6	さいたま新都心
     7	大宮

ゼロ埋め

$ nl -n rz utl-kita
000001	東京
000002	上野
000003	尾久
000004	赤羽
000005	浦和
000006	さいたま新都心
000007	大宮

しっかり6桁であることも確認できました。

余談

なぜフォーマットにlz「左詰めゼロ埋め」が存在しないのでしょうか、一瞬考えてしまいました。
100を6桁で左詰めゼロ埋めすると100000になりますね。ぜひ銀行口座の残高などで積極的に使ってほしい書式です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?