はじめに

こんにちは!今回はseqコマンドについて解説します。

seqは連続した数字を出力するコマンドです。スクリプトでループを使う時とか、連番ファイルを作る時とか、めっちゃ便利ですよ。

「シーケンス」の略で、「1から100まで出力してほしい」みたいな数字の列を簡単に作れます。

seqコマンドとは

seqは、指定された範囲の数字を順番に出力する外部コマンドです。

シンプルですが、シェルスクリプトでのループや、テスト用のデータ生成に活躍します。開始値、終了値、増分を指定できるので、柔軟に数字の列を作れるんです。

基本構文

1
seq [オプション] [開始値] [増分] [終了値]

開始値と増分は省略できます。省略した場合は開始値が1、増分が1になります。

主なオプション

オプション 説明
-f FORMAT 出力形式を指定(printf形式)
-s SEP 区切り文字を指定(デフォルトは改行)
-w 桁数を揃える(ゼロパディング)

使用例

例1: 1から10までを出力

1
seq 10

実行結果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
1
2
3
4
5
6
7
8
9
10

最もシンプルな使い方。終了値だけを指定すると、1から指定値まで出力されます。

例2: 指定範囲を出力

1
seq 5 15

実行結果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
5
6
7
8
9
10
11
12
13
14
15

開始値と終了値を両方指定できます。この場合は5から15までが出力されます。

例3: 増分を指定して出力

1
seq 0 5 30

実行結果:

1
2
3
4
5
6
7
0
5
10
15
20
25
30

0から30まで、5ずつ増やします。偶数だけ出力したい時や、10ずつのステップが欲しい時に便利ですね。

例4: 逆順を出力

1
seq 10 -1 1

実行結果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
10
9
8
7
6
5
4
3
2
1

増分にマイナスを指定すると逆順になります。カウントダウンが必要な時に使えます。

例5: 桁数を揃える(ゼロパディング)

1
seq -w 1 15

実行結果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15

-wオプションで出力の桁数を自動調整。ファイル名に連番を付ける時に便利です。

例6: カンマ区切りで出力

1
seq -s , 1 5

実行結果:

1
1,2,3,4,5

-sオプションで区切り文字を指定。改行の代わりにカンマで区切られます。

例7: 小数点で増分

1
seq 0.5 0.5 3

実行結果:

1
2
3
4
5
6
0.5
1
1.5
2
2.5
3

小数点での増分も対応しています。温度や確率などの計算に活躍。

例8: printf形式でフォーマット

1
seq -f "Day %02g" 1 5

実行結果:

1
2
3
4
5
Day 01
Day 02
Day 03
Day 04
Day 05

-fオプションでprintf形式を指定。テキストを加えた出力ができます。

例9: ファイル名を連番で作成(シェルスクリプト内で使用)

1
2
3
for i in $(seq 1 5); do
  touch file_$i.txt
done

seqの出力をループで使う典型的な例。file_1.txtからfile_5.txtまで作られます。

例10: テスト用データの生成

1
seq 1 100 | paste -sd+ | bc

1から100を足し算で合計を出す例。シェルスクリプトとの組み合わせで色々できます。

Tips・注意点

シェルスクリプトでのループに最適

1
2
3
for i in $(seq 1 10); do
  echo "Processing item $i"
done

seqの出力をループで回すのは、スクリプトで何度も処理をしたい時の基本パターンです。

{1..10}との違い

1
2
3
4
5
6
7
8
9
# Bashの拡張機能(seqより高速)
for i in {1..10}; do
  echo $i
done

# seqコマンド(より柔軟)
for i in $(seq 1 2 10); do
  echo $i
done

Bash 3.0以降は{1..10}という表記も使えます。ただし、増分が指定できないのでseqはまだ必要です。

パイプの右側で出力の列を作る時に便利

1
2
# 100個のランダムな数字を生成
seq 100 | xargs -I {} bash -c 'echo $RANDOM'

seqの出力を別のコマンドに渡す時も活躍します。

実践的な使い方

ファイルの一括ダウンロード

1
2
3
for i in $(seq 1 50); do
  wget "https://example.com/image_$i.jpg"
done

複数のファイルをダウンロードする時。URLに連番が入ってる場合に便利ですね。

ディレクトリを日付で作成

1
2
3
for i in $(seq 1 12); do
  mkdir -p "month_$(seq -f '%02g' $i $i)"
done

月ごとのディレクトリを一括作成。月号をゼロパディングで統一できます。

ログファイルのローテーション

1
2
3
4
for i in $(seq 10 -1 2); do
  mv "app.log.$((i-1))" "app.log.$i"
done
mv app.log app.log.1

ログファイルを古い順に番号付けしてローテーション。スクリプト内での処理順序が大切です。

まとめ

seqコマンドのポイント:

  • 連続した数字を出力する便利なコマンド
  • シェルスクリプトのループに最適
  • -w: 桁数を揃える(ゼロパディング)
  • -s: 区切り文字を変更(カンマなど)
  • -f: printf形式でフォーマット
  • 開始値・終了値・増分を柔軟に指定できる

シェルスクリプトをよく書く人は、seqをマスターすると仕事がグッと楽になりますよ!