如何向 shell 中的矩阵的所有元素添加零小数点

How to add zero decimal points to all elements of a matrix in shell

我有一个包含整数和浮点数的文件,它有 3 列和很多行。我希望所有数字都采用浮动格式,其中 6 位有效数字,即数字 2 变为 2.000000。我已经尝试过这个脚本,但它只适用于一列。如果您能帮助我如何将其用于接下来的两列或任何其他可以完成这项工作的单行脚本,我将不胜感激。提前致谢

awk '{printf "%.6f\n",}' file

您提供的脚本仅适用于一列,因为您只打印脚本中的第一列。如果您只有 3 列并且列数是固定的,则只需将其他两列添加到您的打印语句中即可使其正常工作。

例如:

awk '{printf "%.6f %.6f %.6f \n",,,}'

如果列数未知,您可以在 awk 中使用循环来打印所有列。 NF 将给出记录总数。您可以遍历它并打印结果。

awk '{ for (i=1; i<= NF; i++) printf "%.6f ",$i; print "" }' input

如果您的文件仅包含三列(NF 在这种情况下为 3),您也可以根据需要使用此脚本打印三列。

正如 @kvantour 在评论中所指出的,一种优雅的方式来编写上面的一行是:

awk '{for(i=1;i<=NF;++i) printf "%.6f" (i==NF?ORS:OFS), $i} 

本质上,两个单行代码做同样的事情,但是 ORS(输出记录分隔符)和 OFS(输出字段分隔符)变量提供了灵活性,可以轻松快速地更改输出。

所以,(i==NF?ORS:OFS) 它的作用是,如果该字段不是最后一列,则打印 OFS(默认情况下,OFS 是 space)并且如果它是最后一列,则打印 ORSORS 的默认值是换行符)。使用这些分隔符变量的优点是,例如,如果您希望在结果中的行之间有两个换行符而不是一个换行符,可以使用 ORS="\n\n"

轻松设置