我有一个文件
555.92 569.472 582.389 648.078 999.702 1040.75 1386.24 1418.47 1998.26 2182.13 2384.3
我需要像这样对每个数字进行舍入
556 569 582
理想情况下,我不需要创建 tmp 文件。如何做?
答案1
通过printf函数运行文件的内容。
$ xargs -a numbers.txt -n1 printf "%1.f "
556 569 582 648 1000 1041 1386 1418 1998 2182 2384
此外,Ubuntu 还有一个不错的小程序,numfmt
它允许将数字格式化为用户定义的标准,并且易于人类阅读。
例如,
$ xargs -a numbers.txt -n1 numfmt --to=si --round=up | xargs echo
556 570 583 649 1.0K 1.1K 1.4K 1.5K 2.0K 2.2K 2.4K
查看man numfmt
了解更多信息。
答案2
bash
只能处理整数运算。使用更强大的语言,例如 Perl:
perl -ane 'printf "%.0f ", $_ for @F' file
-n
逐行读取输入-a
将每行按空格拆分到@F
数组中%.0f
是小数点后为零位的流格式
答案3
另一个 Python 解决方案(一行代码)。在终端中运行:
python3 -c "[print(round(float(n))) for n in open('f').read().split()]"
'f'
包含浮点数的源文件在哪里(位于单引号之间),例如:
python3 -c "[print(round(float(n))) for n in open('/home/jacob/Bureaublad/test').read().split()]"
输出:
556
569
582
648
1000
1041
1386
1418
1998
2182
2384
另一种输出方式
如果您希望将数字排成一行:
python3 -c "[print(round(float(n)), end=' ') for n in open('f').read().split()]"
(感谢@Oli!)
输出:
556 569 582 648 1000 1041 1386 1418 1998 2182 2384
解释
命令:
python3 -c "[print(round(float(n))) for n in open('f').read().split()]"
部分内容:
open('f').read().split()
读取文件'f'
,将其分割成浮点数(现在仍然是字符串)
round(float(n))
首先解释细绳 n
作为浮动,发子弹将其转换为整数
[print(round(float(n))) for n in open('f').read().split()]
最后,生成打印命令,打印所有四舍五入的浮点数。
答案4
使用python
:
#!/usr/bin/env python2
with open('/path/to/file.txt') as f:
for line in f:
numbers = line.strip().split(' ')
for num in numbers:
print int(round(float(num))),
该列表
numbers
将包含所有放在空格中的数字 (line.rstrip().split(' ')
)然后我们使用
round()
函数对浮点数进行四舍五入由于输入存储为字符串,我们需要使用
float()
函数将其转换为浮点数该
int()
函数将打印丢弃小数点的数字,即仅保留整数部分
输出 :
556 569 582 648 1000 1041 1386 1418 1998 2182 2384