如何在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)
将是理想的输出。