目前我有一个从命令中输出的数字排序结果:
18,19,62,161,162,163,165
我想将这些数字列表压缩成单个数字或数字范围的列表:
18-19,62,161-163,165
我考虑在Bash中对数组进行排序并读取下一个数字以查看它是否为+1... 我有一个PHP函数基本上做了同样的事情,但是我在将其转换为Bash时遇到了问题:
foreach ($missing as $key => $tag) {
$next = $missing[$key+1];
if (!isset($first)) {
$first = $tag;
}
if($next != $tag + 1) {
if($first == $tag) {
echo '<tr><td>'.$tag.'</td></tr>';
} else {
echo '<tr><td>'.$first.'-'.$tag.'</td></tr>';
}
unset($first);
}
}
我想可能有一个bash的一行命令可以做到这一点,但我的谷歌搜索结果很少...
更新:
感谢@Karoly Horvath的快速回答,我用它完成了我的项目。我对其他更简单的解决方案非常感兴趣。
sed "s/,/\n/g"
- Karoly Horvath[
是一个命令,因此需要在其后加上一个空格。此外,算术运算需要特殊的语法:if [ $prev -ne $((n+1)) ]
或者if (( prev != n+1 ))
。 - glenn jackman