for循环中使用declare -i定义数值变量丢失小数的问题咨询
Bash中保留小数变量的解决办法
问题根源
declare -i是Bash里专门定义整数变量的命令,只要用它声明的变量,赋值时会自动砍掉小数部分,只留整数。你代码里给B加了declare -i,所以哪怕awk算出了带小数的结果,存到B里也会被截断成整数,这就是为什么输出只有2。
修复代码
把B的declare -i去掉,直接用普通变量存awk的输出就行。A是文件行数,本身是整数,用declare -i没问题:
for file in *.tsv do declare -i A=$(wc -l < "$file") echo "$A" B=$(awk -v A="$A" 'BEGIN {d=length(A); printf "%."d"f\n", A/1000000}') echo "$B" done
补充说明
Bash本身对浮点运算支持很差,用awk来处理除法并保留小数是正确的思路,只要别把结果存到整数类型的变量里,就能完整保留小数部分。
内容的提问来源于stack exchange,提问作者JVGen
相关产品推荐
相关产品推荐

