Twitter の俺の TL にこんなネタが流れてきた。現実逃避にはもってこいのネタ。
- 連続する数列をハイフンでまとめるシェルスクリプト - ザリガニが見ていた…。
-
Rubyでどう書く?:連続した数列を範囲形式にまとめたい.いや,Rubyで書かない. 上田さんのブログ - awkで連続した数列を範囲形式に - jarp,
- TL で見かけた回答ツイート
真の shellist たるもの、外部コマンドに頼ってはいけない(適当)。 というわけで、ピュアシェルスクリプトをどうぞ。
read i;s=${i%% *};let p=x=s-1;for n in $i x;do((n-p-1))&&{((p-x))&&o=$o-$p;o=$o,\ $n;x=$n;};p=$n;done;o=$s${o#-$s};echo ${o%, x}.
…ツイート用に 140文字以内に収めるのに必死ですみません。
ふつうの sh
だと流石に無理(?)なので、bash
, ksh
前提です。
ちなみに、負数を与えても大丈夫です。
インデントして少し見易くしたのが以下。超適当ですな。
#!/bin/bash
# or
#!/bin/ksh
read i
s=${i%% *}
let p=x=s-1
for n in $i x; do
((n-p-1)) && {
((p-x)) && o=$o-$p
o=$o,\ $n
x=$n
}
p=$n
done
o=$s${o#-$s}
echo ${o%, x}.