Unix 在EXPR命令中定义特定的输出计数
我有一个场景,我想在expr中有9个字符 我有以下示例代码:Unix 在EXPR命令中定义特定的输出计数,unix,Unix,我有一个场景,我想在expr中有9个字符 我有以下示例代码: var1=012345678 #this is 9 characters sum=`expr $var1 + 1` echo "$sum" 结果如下: ./sample.sh : 12345679 #this is only 8 characters 我的预期产出: ./sample.sh : 012345679 这方面有什么帮助吗?在进行数学运算时,前导零将被删除。 您可以使用print
var1=012345678 #this is 9 characters
sum=`expr $var1 + 1`
echo "$sum"
结果如下:
./sample.sh : 12345679 #this is only 8 characters
我的预期产出:
./sample.sh : 012345679
这方面有什么帮助吗?在进行数学运算时,前导零将被删除。
您可以使用
printf“%09d”123
强制9长度输出。
当您尝试使用语法((sum=${var1}+1))
时,您会遇到另一个问题:当第一个数字是0
时,bash需要一个不同的基数。您可以使用删除第一个
0
var1=012345678
echo "${var1#0}"
awk -v var1=$var1 'BEGIN { printf("%09d\n", var1 + 1) }'
这仅对您的输入有帮助,而对00012
没有帮助。
可以使用echo$((10#$var1))
这可以通过以下方法更容易地解决:
var1=00012345678
echo "${var1} 1" |awk '{ printf("%09d\n", $1 + $2) }'
您可以使用
var1=012345678
echo "${var1#0}"
awk -v var1=$var1 'BEGIN { printf("%09d\n", var1 + 1) }'
BEGIN
用于无需输入文件的解析。选项
-v
是在awk脚本中使用shell变量的干净方法。不要尝试引用名言,总有一天它会射到你自己的脚:
# Don't do this
awk 'BEGIN { printf("%09d\n", '${var1}' + 1) }' # Just do not do it
您能解释一下“%09d”部分在awk中的含义吗?
%d
=参数为整数09
=最小长度9,如果长度需要,则用前导零填充。有关详细信息,请搜索printf格式。