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 6

行番号のセパレータを変更するnlコマンドのsオプション

Last updated at Posted at 2020-12-05

nlコマンドはsオプションを指定することで、行番号と入力行のセパレータ文字列を変更することができます。

sオプションの使い方

まずはマニュアルを参照してみましょう。説明の差はほとんどありません。-sの後に文字列を指定することで、セパレータを変更できるようです。そしてデフォルトはタブです。

info nl (GNU coreutils)

‘-s STRING’
‘--number-separator=STRING’
     Separate the line number from the text line in the output with
     STRING (default is the TAB character).

man nl (BSD)

     -s sep       Specify the characters used in separating the line number and
                  the corresponding text line.  The default sep setting is a sin-
                  gle tab character.

busybox nl --help

	-s STRING	Use STRING as line number separator

POSIX

-s sep
Specify the characters used in separating the line number and the corresponding text line. The default sep shall be a <tab>.

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

sオプションを試す

それでは最初の記事で使用したテキストファイル「utl-kita」で実際に試してみましょう。
まずは、セパレータをタブから,カンマに変更して出力をCSVにしてみます。-wオプションで駅ナンバリング表示したときのコマンド入力を流用します。

$ nl -n rz -w 2 -s , utl-kita | sed 's/^/JU/'
JU01,東京
JU02,上野
JU03,尾久
JU04,赤羽
JU05,浦和
JU06,さいたま新都心
JU07,大宮

これで駅ナンバリング表示のCSVデータを作成することができました。元からあるCSVデータに通し番号のIDを振るときにとても便利なオプションです。

さらに、-sに指定できるのは文字(character)ではなく文字列(string)となっているため、長い文字列を挿入することもできます。

$ nl -n rz -w 2 -s ',宇都宮線・高崎線,' utl-kita | sed 's/^/JU/'
JU01,宇都宮線・高崎線,東京
JU02,宇都宮線・高崎線,上野
JU03,宇都宮線・高崎線,尾久
JU04,宇都宮線・高崎線,赤羽
JU05,宇都宮線・高崎線,浦和
JU06,宇都宮線・高崎線,さいたま新都心
JU07,宇都宮線・高崎線,大宮

路線名の列を簡単に付加することができました。


余談

オプションのデフォルトがタブというのは以外にありがたいことのようにな気がしてきました。というのは、echo -eのように、nl -s '\t'としても残念ながらタブと識別されません。

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

ターミナルではCtrl+v Tabなどと入力すればタブがそのまま入力できるのですが、めったに使わないのでいつも忘れてしまいます。

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

「難読化シェル芸」勢の方々は、もっとおもしろいタブの入力をやりそうです。なにかあればまた追記したいと思います。

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?