我想使用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
我知道我可以手动遍历所有这些数据,然后构建新的数据列,但我想有一种更有效的方法。你碰巧知道一些聪明的方法吗?
答案 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