如何向有限行数的特定列添加常量值并设置小数的精度

如何向有限行数的特定列添加常量值并设置小数的精度

我想向第 10 行到第 20 行的第三(和第二)列添加一个常量值。该怎么做?我已经尝试过这段代码,但它似乎确实有效。它给了我相同的输出文件。有人可以解释一下为什么以及如何更好地工作吗?

 awk '{if(NR>9) $3=$3+1; print $0}' <file_input  > file_output

在这种情况下,您认为有更好的解决方案而不是使用 awk 吗?请告诉我,谢谢。祝大家好运。

这是 input_file 的头部

SCAN U=3
1.0
+7.2621642310  +0.0000000000  +0.0000000000
+0.0000000000  +7.4947599620  +0.0000000000
-0.4702406680  +0.0000000000 +50.5797763000
O W
56 20
Selective
Cartesian
+6.9271068928 +7.2623406786 33.3906 T T T

...然后就这样继续预期的输出应该是这样的:

SCAN U=3
1.0
+7.2621642310  +0.0000000000  +0.0000000000
+0.0000000000  +7.4947599620  +0.0000000000
-0.4702406680  +0.0000000000 +50.5797763000
O W
56 20
Selective
Cartesian
+6.9271068928 +8.2623406786 34.3906 T T T

以及如何设置运算结果的小数精度?

答案1

我想出了

awk 'NR>9 && NR<21{
  printf "%s %+.10f %.4f %s %s %s\n",$1,1+$2,1+$3,$4,$5,$6; 
  next ; }
 {print}' 

在哪里

  • printf用于格式化
  • %+.10f具有 10 个带领先精度的浮动+
  • 使用固定数量的字段
  • 可以是单行的,我为了阅读目的而分开

请注意,根据您的情况locale,您可能需要添加前缀LANG=C

例如

LANG=C awk '...'

我的法国本地线路是

+6.9271068928 +8,0000000000 34,0000 T T T

答案2

awk 'NR>9 && NR<21{$2=$2+1;$3=$3+1}{print}' <file_input  > file_output

归功于卡西莫多

相关内容