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
的格式字符串来填充 0
s 到 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)'
我有这个脚本可以提供我需要的准确输出:
我的文件的输出示例:
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
的格式字符串来填充 0
s 到 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)'