如何在bash中将输入设置为整数形式?

如何在bash中将输入设置为整数形式?,bash,awk,Bash,Awk,我正在从文本文件中读取值: input=$(head -52 file.txt | tail -1 | cut -f2 | awk '{print $3}' ) 我得到文件52行的第3个字,即: 576.00 但是,我需要输入值作为整数。(仅576而不是576.00) 然后我需要将输入值除以3,并将与计算结果最接近的整数分配给变量输出: output=$((input / 3)) 因为答案不是整数,所以关于的行不起作用。有什么想法吗 您可以删除它的小数部分: input=$(head -5

我正在从文本文件中读取值:

input=$(head -52 file.txt | tail -1 | cut -f2 | awk '{print $3}' )
我得到文件52行的第3个字,即:

576.00
但是,我需要输入值作为整数。(仅576而不是576.00) 然后我需要将输入值除以3,并将与计算结果最接近的整数分配给变量输出:

output=$((input / 3))

因为答案不是整数,所以关于的行不起作用。有什么想法吗

您可以删除它的小数部分:

input=$(head -52 file.txt | tail -1 | cut -f2 | awk '{print $3}' | cut -d '.' -f 1)
再加上a,你就是金色的

然而,我无法理解为什么在对答案进行除法和四舍五入之前要将小数部分(“下限”值)切掉。例如,使用等效的Python代码:

>>> import math
>>> round(math.floor(4.99)/3, 0) == 1
True
>>> round(4.99/3, 0) == 2
True

只需将awk更改为:

awk '{print int($3)}' 
现在将输出
576

或者您可以在awk本身中进行除法:

input=$(head -52 file.txt | tail -1 | cut -f2 | awk '{print int($3)/3}' )

为什么不把整条线清理干净,让awk来做这项工作:

input=$(awk 'NR==52 {print int($3)/3}' file.txt)
echo $input
192

如果文件很大,您可以在完成作业后跳出:

awk 'NR==52 {print int($3)/3;exit}'

也可以在Awk中完成所有提取。有关完整的解决方案,请参阅用户先前的问题:+1。不过,我原以为
int($3/3)
将是理想的输出。