4
1

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コマンド

Last updated at Posted at 2020-11-30

nlコマンドはテキストデータに行番号を付加する機能を持つ、便利なコマンドラインユーティリティです。ほとんどのUnix系環境では、特別なソフトウェアをインストールをすることなく最初から使うことができるコマンドです。この記事では、はじめてnlを触る人でも気軽に試せるよう基本的な使い方を説明します。

nlコマンドができること

nlができることは「テキストデータに行番号をふる」ことです。それ以上でも以下でもありません。コマンドの機能としてはそれだけですが、行番号をふることに関して様々な要求を満たすためのオプションを持っています。そして他のコマンドと組み合わせることで、その用途は「行番号をふる」という枠を越えて広がっていきます。

nlコマンドの使い方

基本的な使い方

例えば、JR上野東京ライン北行(宇都宮線・高崎線)の駅名が記載された「utl-kita」という名前のテキストファイルがあるとします。ファイルの中身をそのまま標準出力に表示するcatを使うと次のようになります。

$ cat utl-kita 
東京
上野
尾久
赤羽
浦和
さいたま新都心
大宮

このテキストファイル「utl-kita」にnlを使用した場合、以下のような出力になります。

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

これでnlによって行の先頭に行番号が付加されたことが確認できたと思います。

標準入出力の利用

引数を指定してファイルから読み込む以外にも、標準入力から直接データを受け取ることができます。また、標準入力から受け取ることをより明示的にするために、-という特殊な引数も用意されています。標準入出力と|(パイプ)を利用することで、様々なコマンドを組み合わせることができます。

さきほどの例は、catnlを組み合わせて以下のように実行しても同じ結果になります。

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

パイプを使えばいくつでもコマンドをつなげることができます。以下の例では、yesによって出力される「y」にnlが行番号を付加し、headが先頭3行だけを切り取って標準出力に表示しています。

$ yes | nl | head -n 3
     1	y
     2	y
     3	y

#リダイレクトとファイル

行番号を付加したデータをファイルに保存するには、>(リダイレクト)を使って出力するファイルを指定します。

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

これでファイルに保存することができました。残念ながらリダイレクトで元のファイルへの上書き保存はできません。ファイルが消失するので、試す場合は覚悟を持って試しましょう。

$ nl utl-kita > utl-kita
$ cat utl-kita
$ wc utl-kita
0 0 0 utl-kita

リダイレクトで読み込むファイルと同じファイルに出力した結果、データが消失していることがわかります。wcは文字数をカウントするコマンドで、出力の3つの0 0 0は、左から行数、単語数、バイト数を表します。参考までに元のテキストファイルに対してwcを実行したときの結果は以下になります。

$ wc utl-kita 
 7  7 64 utl-kita
$ wc numbered_utl-kita 
  7  14 113 numbered_utl-kita

詳しくは説明しませんが、上書き保存をするにはmoreutilsというコマンドユーティリティに含まれるspongeコマンドを利用する方法などがあります。


#補足

サンプルのutl-kitaファイルは、以下のテキストをプロンプトに貼り付ければ簡単に作成することができます。

cat <<EOF >utl-kita
東京
上野
尾久
赤羽
浦和
さいたま新都心
大宮
EOF
4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?