「nlコマンドAdvent Calendar 2020」まとめ

[nlコマンドAdvent Calendar 2020](https://qiita.com/advent-calendar/2020/nl)
<img width="800" style="display:block;margin:auto;" alt="スクリーンショット 2020-12-26 17.03.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542542/54e8e31c-b0a0-dac1-6def-4cdf968542cb.png">

---

# 各記事のサマリー

---

## 初心者向け記事

- 12/1 [はじめてのnlコマンド](https://qiita.com/Carol_815/items/d1081ff7a7d3f9971edc)
- 12/2 [様々なnlコマンドの実装](https://qiita.com/Carol_815/items/a298d7063e77d00d8bec)
- 12/3 [nlコマンドの使い方を調べる](https://qiita.com/Carol_815/items/5d73532b0386b5fd008d)

このあたりは`nl`に限らず、各コマンド共通だと思います。

---

## オプション解説記事

- 12/4 [行番号のフォーマットを変更するnlコマンドのnオプション](https://qiita.com/Carol_815/items/f3ebf5005a94f58f6055)
- 12/5 [行番号の桁数を変更するnlコマンドのwオプション](https://qiita.com/Carol_815/items/fa16e4875ba7bc19de86)
- 12/6 [行番号のセパレータを変更するnlコマンドのsオプション](https://qiita.com/Carol_815/items/b7aa0a4530041c79b7fd)
- 12/9 [セクションの区切り文字列を変更するnlコマンドのdオプション](https://qiita.com/Carol_815/items/401c327a1dbc7c63b7bb)
- 12/10 [行番号の付番方式を変更するnlコマンドのb,f,hオプション](https://qiita.com/Carol_815/items/997de8239ce3402b46dc)
- 12/12 [行番号の初期値を変更するnlコマンドのvオプション](https://qiita.com/Carol_815/items/a8a4090ba151fd526758)
- 12/13 [行番号の増加値を変更するnlコマンドのiオプション](https://qiita.com/Carol_815/items/9e912946d4db1f22ce20)
- 12/14 [論理ページごとに行番号をリセットしないnlコマンドのpオプション](https://qiita.com/Carol_815/items/ac3efeb363c6edb32bba)
- 12/16 [行番号を付加する空行の単位を変更するnlコマンドのlオプション](https://qiita.com/Carol_815/items/bdf312ae90a2c2496de1)

オプションは11個あり、9本の記事書きました。


---

## 挙動解説記事

- 12/7 [nlコマンドでの空行の取り扱い](https://qiita.com/Carol_815/items/0e7de6dd1fb3d821ec6e)
- 12/8 [nlコマンドの論理ページ](https://qiita.com/Carol_815/items/d1f52df36b0d39b374b0)
- 12/11 [nlコマンドでの正規表現の利用](https://qiita.com/Carol_815/items/dc7d3a23d1ebc33bf1ba)
- 12/15 [nlコマンドの通し番号制御](https://qiita.com/Carol_815/items/ffeb1151b1c9fabcd7f8)
- 12/17 [nlコマンドの論理ページを無効化する](https://qiita.com/Carol_815/items/2066deddbac59a3f83a5)
- 12/19 [nlコマンドの最大値](https://qiita.com/Carol_815/items/88153744df5133b0db54)

基本的な動作仕様と注意点などについて書きました。


---

## 代替方法に関する記事


- 12/18 [nlコマンドで素数を求める](https://qiita.com/Carol_815/items/b6f54bdfff4852b759df)

`seq`の代わりに`nl`を使ってみる。

- 12/20 [エディタでnlコマンドを代替する](https://qiita.com/Carol_815/items/3a7987fee44e84e0fe3e)
- 12/21 [スクリプトでnlコマンドを代替する](https://qiita.com/Carol_815/items/3156dcf08494a48295a8)
- 12/22 [様々なコマンドでnlコマンドを代替する](https://qiita.com/Carol_815/items/ccc86d20167135580c6c)

他のコマンドで`nl`する。


---

## その他の記事

- 12/23 [nlコマンドの処理性能](https://qiita.com/Carol_815/items/ae8c1d9adda66d7bd740)

性能比較をしてみました。`grep`と`cat`速すぎ。

- 12/24 [nlコマンドの開発に参加する](https://qiita.com/Carol_815/items/b245018668ffe14fd4ba)
- 12/25 [未来のnlコマンド](https://qiita.com/Carol_815/items/a477b70e374458ce9033)

`nl`に限らずコマンドをよりよくしていくための記事です。

---

## 他のAdvent Calendarへの寄稿

### [NetBSD AC](https://qiita.com/advent-calendar/2020/netbsd)
- 12/23 [NetBSDのnlコマンドとProblem Reports](https://qiita.com/Carol_815/items/c81a278788978b5901d0)

POSIX非互換と不具合報告のお話。

### [AIIT(産業技術大学院大学) AC](https://qiita.com/advent-calendar/2020/aiit)

- 12/23 [AIIT(産業技術大学院大学)で学ぶnlコマンド](https://qiita.com/Carol_815/items/f61a727c211de58043e3)

過去の話をまとめたポエム。


---

# ふりかえり

---

## [横浜線の停車駅を表示する](https://qiita.com/Carol_815/items/9e912946d4db1f22ce20#nl%E3%81%A7%E5%BF%AB%E9%80%9F%E5%81%9C%E8%BB%8A%E9%A7%85%E3%81%A0%E3%81%91%E3%82%92%E8%AD%98%E5%88%A5%E3%81%99%E3%82%8B)

特に思い入れのあるシェル芸。coreutilsの`nl`で`-i 0`ができるようになったのでやってみたかった。

```console:BSD
$ nl -w 1 -v 0 -i 0 -b p'[川山菊新鴨田相橋八片]' yokohamaline | nl -w 1 -i 0 | tr '01' '快各' | expand
各      快      東神奈川
各              大口
各      快      菊名
各      快      新横浜
各              小机
各      快      鴨居
各      快      中山
各              十日市場
各      快      長津田
各              成瀬
各      快      町田
各              古淵
各              淵野辺
各              矢部
各      快      相模原
各      快      橋本
各      快      相原
各      快      八王子みなみ野
各      快      片倉
各      快      八王子
```

---

## 不具合報告

- coreutils `nl`での`-d`不具合
- coreutils `seq`と`sleep`での`inf`トークンのドキュメント不足
- NetBSD(macOS) `nl`での`-s`オプションのPOSIX非互換

記事執筆中の検証で見つけた不具合をリアルタイムに報告していました。連載中に修正方針が固まったものについては、過去記事も修正加筆しています。

---

## 今回書けなかった記事

- coreutilsの`cat -n`はなぜ速いのか
- FreeBSDの`nl`
- BusyBoxのビルドオプション
- `pr`と組み合わせる
- POSIXの策定経緯

今回は調査不足でまとまらず記事にできませんでした。そのうち書くかもしれません。

---

## 感想

- 疲れた
- 思いつきで始めた（頭おかしい）ので構成なども考えながら
- 記事も文章になってないところたくさん…
- 説明順がかなり重要で依存関係がヤバい


- 結果的にソフトウェア品質が高まったのでやって良かった
- 調べれば調べるほどわからないことがたくさん
- **nlコマンドぜんぜんわからん**

---

# おしまい 

---