UNIX/Linuxの部屋 seqコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド seq 連番・数列を生成するコマンド このエントリーをはてなブックマークに追加

最終更新


seq コマンドとは、連番・数列を生成し、出力するコマンドである。GNU の Coreutils に含まれているので、Ubuntu・CentOS などの Linux 系 OS であれば標準で使用可能である。また、FreeBSD 9.0 以降・NetBSD 3.0 以降ならば seq コマンドがベースシステムに追加された。


引数ふたつパターン: X〜Y まで表示
引数にふたつの数字を指定した場合、初期値と最終値として出力する。
% seq 7 11
7
8
9
10
11

引数3つパターン: X〜Y まで増分 Z で表示
引数に3つの数字を指定した場合、開始値・増分・最終値とみなす。
% seq 5 2 11
5
7
9
11
→ 5から始め、2ずつ増加し、11になったら終了。

小数・減少・マイナス
開始値・増分・最終値いずれも、小数を指定することができる。
% seq 1.3 0.75 3.56
1.30
2.05
2.80
3.55

間隔にマイナス値を指定することで、減少させることができる。
% seq 3 -1 0
3
2
1
0

開始値や終了値にマイナス値を指定することもできる。
% seq -6 4 8
-6
-2
2
6

seq コマンドのオプション
-w オプションを指定すると、同じ文字数になるようゼロパディングがなされる。
% seq -w 1 100
001
002
(略)
099
100

-s オプションで区切り文字を変更できる。
% seq -s, 1 5
1,2,3,4,5
→ カンマ区切りに
% seq -s", " 1 5
1, 2, 3, 4, 5
→ 「カンマ+空白」区切りに

-f オプションで数値フォーマットを柔軟に設定することができる。printf(3) のような書き方ができるので、かなり強力。
% seq -f'%.2f' 9 12
9.00
10.00
11.00
12.00
→ 小数点以下2桁
% seq -f'%5.2f' 9 12
 9.00
10.00
11.00
12.00
→ 小数点以下2桁かつ全体を5桁右揃え
% seq -f'%07.2f' 9 12
0009.00
0010.00
0011.00
0012.00
→ 小数点以下2桁かつ全体を7桁ゼロパディング
% seq -f'%+.0f' -5 2 5
-5
-3
-1
+1
+3
→ 符号を必ずつける

Howto: sh スクリプトで一定回数ループ
10回ループ。
for i in `seq 10`; do
echo $i
done
上記を 1行にまとめたもの。
for i in `seq 10`; do echo $i; done

Howto: seq コマンドで連番ファイルを生成
seq の -f オプションを使って、連番かつゼロパディングのファイルを作成する方法。まずは下記でファイル名を確認。
% seq -f'file%03g.txt' 1 999
file001.txt
file002.txt
(略)
file999.txt
問題なければ touch コマンドでファイルを作成する。
% touch `seq -f'file%03g.txt' 1 999`
ファイル数が多い場合は xargs を使おう。
% seq -f'file%03g.txt' 1 999 | xargs touch

Howto: 連番ファイルをリネームやコピー
まずは確認。
% for i in `seq 1 10`; do echo cp file$i.txt dir/file$i.txt; done
cp file1.txt dir/file1.txt
(略)
cp file1.txt dir/file1.txt
OK なら上記の echo を蓮して実行すればよい。cp を mv にすればリネームができる。

Howto: seq コマンドで IP アドレス文字列を生成
IP アドレスの連番を作成する方法は下記のとおり。
% seq -f'"%05.2f"' -s", " 3 7
"03.00", "04.00", "05.00", "06.00", "07.00"
→ ダブルクォートで囲み、カンマ区切りとする
% seq -f'192.168.0.%.0f' 1 127
192.168.0.1
192.168.0.2
(略)
192.168.0.126
192.168.0.127
→ IPアドレスの連番を生成

-f オプションで頑張るとわかりづらくなるので、下記のようにループさせる方がよいかもしれない。
% for i in `seq 1 127`; do echo "192.168.0.$i"; done
192.168.0.1
192.168.0.2
(略)
192.168.0.126
192.168.0.127

Howto: Linux 系 OS 以外での seq 類似のコマンド
FreeBSD や macOS などの *BSD 系では seq コマンドの代わりに jot コマンドを使うのが一般的であるものの、FreeBSD 9.0 以降・NetBSD 3.0 以降で seq コマンドを使うことができる。また、それ以前であっても、ports/packages から coreutils をインストールすることで、gseq コマンドとして利用可能である。古い OS で coreutils が見つからない場合、その前身である shellutils パッケージを探してみるとよい。
>> FreeBSDオンラインマニュアル(man) FreeBSD seq(1)
>> Linuxオンラインマニュアル(man) Linux seq(1)