如何根据不同的数字位数打印不同的输出

时间:2014-08-01 19:18:03

标签: bash

要求解析输入最多4位数。想获得如下输出:

from `1234` want get `12 34`
from `123`  want get `01 23`
from `12`   want get `00 12`
from `1`    want get `00 01`

例如解析数字表格。

有这个:

case "$1" in
????) sed 's/\(..\)\(..\)$/\1 \2/' <<< "$1" ;;
???)  sed 's/\(.\)\(..\)$/0\1 \2/' <<< "$1" ;;
??)   sed 's/\(..\)$/00 \1/' <<< "$1" ;;
?)    sed 's/\(.\)$/00 0\1/' <<< "$1" ;;
*) echo "usage: NNNN"; exit 1;;
esac

脚本有效,但不是很优雅。它可以“更好”吗?

4 个答案:

答案 0 :(得分:4)

这是一个纯粹的BASH实现,不使用任何正则表达式:

func() { printf -v s "%04d" "$1"; printf "%s %s\n" "${s:0:2}" "${s: -2}"; }

func "124"
01 24
func "1234"
12 34
func "2"
00 02

答案 1 :(得分:1)

只需使用printf

printf %04d $1 | sed 's/\(..\)\(..\)/\1 \2/'

答案 2 :(得分:1)

我认为这会做你想做的事情:

NUMBER=12
printf "%04d" $NUMBER | sed 's/\(..\)\(..\)/\1 \2/'

答案 3 :(得分:0)

另一种bash唯一解决方案:

f=1234
{ read -n2 a; read -n2 b; } <<<$(printf %04d "$f")
echo "$a $b"