AIX Ksh个位数或双位数加0变成3位

AIX Ksh adding 0 to single or double digits to become 3 digits

我有这个脚本可以提供我需要的准确输出:

我的文件的输出示例:

    2222001 1.TEST1.1
    2222002 1.TEST1.2
    2222003 1.TEST1.3
    2825666 1.TEST1.13
    1654651 1.TEST1.15
    9999999 1.TEST1.360
    5121554 1.TEST1.100

我想做的是,如果数字是单数,在前面加双零,例如:001,002 而不是 1,2,如果是双数,则在前面只加 1 个额外的零,例如:013,015。

因此它们最多为 3 位数字。

预期输出:

    2222001 1.TEST1.001
    2222002 1.TEST1.002
    2222003 1.TEST1.003
    2825666 1.TEST1.013
    1654651 1.TEST1.015
    9999999 1.TEST1.360
    5121554 1.TEST1.100

如何在 AIX Ksh 中执行此操作?

执行此操作的众多方法之一是使用 case 语句来识别具有一个或两个字符的单词:

#!/usr/bin/env ksh
while IFS="${IFS}." read -r word1 word2 word3 word4; do
  case $word4 in
    ?)  word4="00$word4";;
    ??) word4="0$word4";;
  esac
  printf '%s %s.%s.%s\n' "$word1" "$word2" "$word3" "$word4"
done

另一种方法是使用带有 %03d 的格式字符串来填充 0s 到 3 位小数:

#!/usr/bin/env ksh
while IFS="${IFS}." read -r word1 word2 word3 word4; do
  printf '%s %s.%s.%03d\n' "$word1" "$word2" "$word3" "$word4"
done

我会通过:

awk -F. -v OFS=. '$NF = sprintf("%03d",$NF)'