Linux 减少文本文件第四列中的小数
我有一个文本文件,其中第四列包含许多小数位的数字。我需要把位数减少到小数点后0.1位 数据: 输出到文件2: 2015041416 KBOS TMP2M 62.0 2015041417 KBOS TMP2M 65.1 2015041418 KBOS TMP2M 66.7 2015041419 KBOS TMP2M 67.5 2015041420 KBOS TMP2M 67.2 2015041421 KBOS TMP2M 65.9 2015041422 KBOS TMP2M 62.8 2015041423 KBOS TMP2M 60.8 2015041500 KBOS TMP2M 56.2 2015041501 KBOS TMP2M 55.7 2015041502 KBOS TMP2M 51.9 2015041503 KBOS TMP2M 51.6 2015041504 KBOS TMP2M 50.2 2015041505 KBOS TMP2M 49.2 2015041506 KBOS TMP2M 48.3 2015041507 KBOS TMP2M 46.6 2015041416 KBOS TMP2M 62.0 2015041417 KBOS TMP2M 65.1 2015041418 KBOS TMP2M 66.7 2015041419 KBOS TMP2M 67.5 2015041420 KBOS TMP2M 67.2 2015041421 KBOS TMP2M 65.9 2015041422 KBOS TMP2M 62.8 2015041423 KBOS TMP2M 60.8 2015041500 KBOS TMP2M 56.2 2015041501kbos TMP2M 55.7 2015041502 KBOS TMP2M 51.9 2015041503 KBOS TMP2M 51.6 2015041504 KBOS TMP2M 50.2 2015041505 KBOS TMP2M 49.2 2015041506 KBOS TMP2M 48.3 2015041507 KBOS TMP2M 46.6Linux 减少文本文件第四列中的小数,linux,bash,unix,sed,Linux,Bash,Unix,Sed,我有一个文本文件,其中第四列包含许多小数位的数字。我需要把位数减少到小数点后0.1位 数据: 输出到文件2: 2015041416 KBOS TMP2M 62.0 2015041417 KBOS TMP2M 65.1 2015041418 KBOS TMP2M 66.7 2015041419 KBOS TMP2M 67.5 2015041420 KBOS TMP2M 67.2 2015041421 KBOS TMP2M 65.9 2015041422 KBOS TMP2M 62.8 201504
使用bash和不使用awk时的输出相同:
printf "%s %s %s %.1f\n" $(< file) > file2
printf“%s%s%s%.1f\n”$(file2
如果您只想在不舍入的情况下减少小数,可以使用sed
:
sed 's/\([0-9]\+\.[0-9]\)[0-9]*$/\1/' input
它搜索一个或多个数字,后跟一个点和一个捕获组中捕获的附加数字。以下可选数字直到行尾被丢弃
如果需要取整,sed
无法执行此操作,因为它根本不支持数学计算。在这种情况下,我建议像其他建议的答案一样使用awk
。awk加舍入:
awk '{printf("%d %s %s %.1f\n", $1, $2, $3, $4) } ' file
这可能是您想要的:
$ awk '{$NF=sprintf("%.1f",$NF)}1' file
2015041416 KBOS TMP2M 62.0
2015041417 KBOS TMP2M 65.1
2015041418 KBOS TMP2M 66.7
2015041419 KBOS TMP2M 67.5
2015041420 KBOS TMP2M 67.2
2015041421 KBOS TMP2M 65.9
2015041422 KBOS TMP2M 62.8
2015041423 KBOS TMP2M 60.8
2015041500 KBOS TMP2M 56.2
2015041501 KBOS TMP2M 55.7
2015041502 KBOS TMP2M 51.9
2015041503 KBOS TMP2M 51.6
2015041504 KBOS TMP2M 50.2
2015041505 KBOS TMP2M 49.2
2015041506 KBOS TMP2M 48.3
2015041507 KBOS TMP2M 46.6
无论文件中有多少字段,它都会工作。准确地说。我需要将大量的小数舍入到第十位(例如0.1)。@AaronPerry你刚才说需要舍入,但这个解决方案舍入了。想想你真正想要的是什么。当
62.7644
变成62.7
或62.8
时,“减少”是什么意思?换句话说,你是想截断、向上取整、向下取整还是其他什么?
awk '{printf("%d %s %s %.1f\n", $1, $2, $3, $4) } ' file
$ awk '{$NF=sprintf("%.1f",$NF)}1' file
2015041416 KBOS TMP2M 62.0
2015041417 KBOS TMP2M 65.1
2015041418 KBOS TMP2M 66.7
2015041419 KBOS TMP2M 67.5
2015041420 KBOS TMP2M 67.2
2015041421 KBOS TMP2M 65.9
2015041422 KBOS TMP2M 62.8
2015041423 KBOS TMP2M 60.8
2015041500 KBOS TMP2M 56.2
2015041501 KBOS TMP2M 55.7
2015041502 KBOS TMP2M 51.9
2015041503 KBOS TMP2M 51.6
2015041504 KBOS TMP2M 50.2
2015041505 KBOS TMP2M 49.2
2015041506 KBOS TMP2M 48.3
2015041507 KBOS TMP2M 46.6