awk-四舍五入多行文本文件中的所有浮点数

问题描述 投票:0回答:1

假定一个多行文本文件,每行包含多个浮点数以及字母数字字符串和特殊字符。唯一的一致性是,所有浮点数都由单个空格与任何其他字符串分隔。此外,假设我们希望将[[each浮点数四舍五入到逗号后最多n个数字。除浮点数外的所有字符串均应保留in placeas is。让我们假设n = 5。

我知道可以通过

awk轻松实现。我当前的代码(如下)仅四舍五入每行的最后一个浮点数,并吞没其前面的所有字符串。我该如何改善?

echo -e "\textit{foo} & 1234.123456 & -1234.123456\n1234.123456" |\ awk '{for(i=1;i<=NF;i++);printf("%.05f\n",$NF)}' # -1234.12346 # 1234.12346
awk floating-point printf rounding
1个回答
0
投票
一种解决方案:

$ echo -e "\textit{foo} & 1234.123456 & -1234.123456\n1234.123456" | awk '{for(i=1;i<=NF;i++){if ($i ~ "[0-9]+.[0-9]+"){printf "%.05f\n", $i}}}'

输出:

1234.12346 -1234.12346 1234.12346

© www.soinside.com 2019 - 2024. All rights reserved.