シェルスクリプトだとFizzBuzzが1行(ワンライナー)で書ける
はじめに
小ネタ。
シェルスクリプトでFizzBuzzを書いたらどんなふうにかけるかを試してみました。
検証環境
$ bash -version | head -n 1
GNU bash, バージョン 5.0.7(1)-release (x86_64-apple-darwin18.5.0)
$ sed --version | head -n 1
sed (GNU sed) 4.7
結果
$ seq 30 | sed '0~3s/[0-9]*$/Fizz/' | sed '0~5s/[0-9]*$/Buzz/'
実行結果は以下の通り。
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
解説
はじめの seq
は数字を列挙するために利用しています。
# 1から5までを出力
$ seq 5
1
2
3
4
5
30までの出力内容を後続する sed
コマンドに引き渡しています。
sed
では、s内部コマンド
で数値を除去しつつ行末に文字列を追加しています。s
の前方に対象行の指定を行っています。- 2つの
sed
コマンドはそれぞれ「先頭行から3行ずつ」、「先頭行から5行ずつ」処理を行っています。
- 2つの
ひとこと
ただただ楽。
ディスカッション
コメント一覧
まだ、コメントがありません