awk-在多行文本文件中舍入所有浮点数

awk-在多行文本文件中舍入所有浮点数,awk,floating-point,printf,rounding,perl,Awk,Floating Point,Printf,Rounding,Perl,假设一个多行文本文件,每行包含多个浮点数、字母数字字符串和特殊字符。唯一的一致性是所有浮点数都用一个空格与任何其他字符串隔开。此外,假设我们希望将每个浮点数取整为逗号后最多n位。除浮子外的所有管柱应保持原位,和原样。让我们假设n=5 我知道这可以通过awk轻松实现。我当前的代码(如下)只对每行的最后一个浮点进行四舍五入,并吞并它前面的所有字符串。我如何改进它 echo -e "\textit{foo} & 1234.123456 & -1234.123456\n1234.1234

假设一个多行文本文件,每行包含多个浮点数、字母数字字符串和特殊字符。唯一的一致性是所有浮点数都用一个空格与任何其他字符串隔开。此外,假设我们希望将每个浮点数取整为逗号后最多n位。除浮子外的所有管柱应保持原位,原样。让我们假设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
echo-e“\textit{foo}&1234.123456&-1234.123456\n1234.123456”|\
awk'{for(i=1;i一种解决方案:

$ 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}}}'
一个解决方案:

$ 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}}}'
使用:

使用:


这就是你想做的吗

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

awk-F'[]'{for(i=1;i这就是你想要做的吗

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

awk-F'[]'{for(i=1;我看
你输入的终止
for
循环的代码,并真正思考它之后对printf的影响!@EdMorton你能澄清一下吗。对我来说,这似乎是正确的:初始化在1(
i=1
),终止在NF(
它是循环的主体)(位于右括号和分号之间)为空。
printf()
在循环之外。展开的代码为(i=1;i@EdMorton谢谢你的解释!让我思考一下这个问题。这个例子应该足够简单,我可以理解。看看你为终止
for
循环而输入的
,然后认真思考一下它对printf的影响!@EdMorton你能澄清一下吗。对我来说,这似乎是正确的:初始化为1(
i=1
),在NF处终止(
i循环体(位于右括号和分号之间)为空。
printf()
位于循环外部。您的代码展开为(i=1;i@EdMorton谢谢你的解释!让我思考一下。这个例子应该足够简单,我可以理解。谢谢,但是如何将所有非浮点保持在适当的位置?请参阅我的perlThanks的其他答案,但是如何将所有非浮点保持在适当的位置?请参阅我的perl的其他答案