我想向第 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
归功于卡西莫多