使用Bash实用程序,根据另一列数字向空白分隔数据添加一列新数字

时间:2013-02-25 11:35:48

标签: bash text add whitespace delimited

我想使用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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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