0

我想使用 Bash 实用程序(例如 cut 和 bc)对以空格分隔的数据列中的每个数字执行简单的计算。数据可能如下所示:

string 0.998663 string string string
string 0.998592 string string string
string 0.999096 string string string

假设我想将第二列中的数字显示更改为三位有效数字。我想在第二列之后直接将这些新数字的另一列添加到此数据中。因此,结果可能如下所示:

string 0.998663 0.999 string string string
string 0.998592 0.999 string string string
string 0.999096 0.999 string string string

我知道我可以手动循环遍历所有这些数据,然后构造新的数据列,但我想有一种更有效的方法可以做到这一点。你会碰巧知道一些聪明的方法吗?

4

2 回答 2

4

试试这条短线:

awk '$2=$2" "sprintf("%.3f",$2)' file

使用您的示例数据:

kent$  echo "string 0.998663 string string string
string 0.998592 string string string
string 0.999096 string string string"|awk '$2=$2" "sprintf("%.3f",$2)'
string 0.998663 0.999 string string string
string 0.998592 0.999 string string string
string 0.999096 0.999 string string string
于 2013-02-25T11:49:51.453 回答
1

您可以尝试:

awk '{printf("%s %s %.3f %s %s %s\n",$1,$2,$2,$3,$4,$5)}' file

测试

$ awk '{printf("%s %s %.3f %s %s %s\n",$1,$2,$2,$3,$4,$5)}' file
string 0.998663 0.999 string string string
string 0.998592 0.999 string string string
string 0.999096 0.999 string string string
于 2013-02-25T11:42:39.473 回答