![如何向有限行数的特定列添加常量值并设置小数的精度](https://linux22.com/image/181023/%E5%A6%82%E4%BD%95%E5%90%91%E6%9C%89%E9%99%90%E8%A1%8C%E6%95%B0%E7%9A%84%E7%89%B9%E5%AE%9A%E5%88%97%E6%B7%BB%E5%8A%A0%E5%B8%B8%E9%87%8F%E5%80%BC%E5%B9%B6%E8%AE%BE%E7%BD%AE%E5%B0%8F%E6%95%B0%E7%9A%84%E7%B2%BE%E5%BA%A6.png)
我想向第 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
归功于卡西莫多