seqコマンドについてまとめる

前々回の投稿で「次回はseqコマンドを掘り下げてみたいと思います。」とノルマを課したのでまとめたいと思います。

seqコマンドの一番メジャーでカンタンな使い方といえば、 seq 10 のように引数を一つ、数値を指定して1から引数の数値までの連続した整数を得る使い方でしょう。ループさせるときによく使います。

そんなseqコマンドのヘルプとマニュアルを読んでまとめます。とりあえずサマリです。

  1. 数値の引数には開始、増減、終了の値を指定できる。
  2. 出力する数値のフォーマットを -fオプションで指定できる。指定はprintfの浮動小数点形式。
  3. 出力する数値のセパレータを -sオプションで指定できる。
  4. -wオプションで出力する数値の桁数を揃えることができる。桁数が足りない文は頭には0がつく。

ちなみに今回検証に使っているのはGNU coreutils 8.32seqです。

まずは1の開始、増減、終了の値を指定について見ていきます。
といっても、これはもうそのままです。増減、と書いたように、負の値を指定して10から1へ、と出力させることもできます。こんなかんじです。

$ seq 10 -2 0
10
8
6
4
2
0

なんなら終了の値を負の値にすることもできます。

$ seq 3 -1 -3
3
2
1
0
-1
-2
-3

だから何だと言われれば、こういうこともできますってだけで、せいぜい・・・なんの役に立つんでしょうか。さらに言えば、小数も指定できます。

$ seq 1 0.5 2
1.0
1.5
2.0

だから(ry
せいぜい、開始値にn、増減にnを指定して、nの倍数を列挙するくらいでしょうか。

$ seq 3 3 9
3
6
9

そろそろ次へ行きましょう。2つ目のフォーマットの指定です。コレはこんな感じです。

$ seq -f %0.4f 1 3 
1.0000
2.0000
3.0000

コレだけだと誰得?な感じですが、こんなこともできます。

$ seq -f %0.4f 1 0.252525252525 3 
1.0000
1.2525
1.5051
1.7576
2.0101
2.2626
2.5152
2.7677

コレもやっぱり誰得?な感じですねぇ。なかなか良い例が浮かびません。
次へ行きましょう、次。

3つ目はセパレータの指定です。ここまで見てきたように、デフォルトでは1行に一つずつ数値が出力されます。これは、デフォルトのセパレータが改行になっているからで、たとえばスペースを指定すれば次のようにできます。

$ seq -s' ' 1 3
1 2 3

最初にコレを取り上げていれば、例示をもっとコンパクトにできたのに。まあループのイテレータにするだけなら改行でもスペースでも変わりませんが、それ以外のときには覚えておくとなにか役に立つかもしれません。

今自分で書いていて気づいたのですが、イテレータでない使い方を提示しないと面白くないですね。イテレータでない使い方で真っ先に思いつくのが、連番のファイル名生成でしょうか。
それには、最後の-wオプションが有効です。

$ seq -w -s' ' 1 10
01 02 03 04 05 06 07 08 09 10

というように、頭に0をつけて桁数を揃えてくれます。
ただ、lsコマンドからパイプでつなげて一撃で不揃いなファイル名から連番のキレイなファイル名にリネームするのは難しそうですね。(なぜ一撃でやろうとするのか)。新旧のファイル名のリスト作って〜なら出来そうですが。それなら普通awkでスクリプト生成しますよね。うーん、なかなか使いどころが難しい。

ところで今回はあえて–helpmanの範囲でエントリを書きました。infoは沼です。