我有一个名为 nvt.gro 的文本文件。我想在最后一列的所有行上添加 0.5 (+0.5):
我的文件如下:
真空中的 GRM
192700
1GRM C1 1 17.188 0.311 13.994 -0.5971 0.0204 -0.0724
1GRM C2 2 0.094 0.383 0.005 0.4831 -0.8709 -0.2204
1GRM C3 3 0.091 0.524 0.008 -0.7098 0.3449 -0.3952
1GRM C4 4 17.185 0.596 0.007 -0.4066 -0.4079 0.1701
2GRM C1 5 17.187 0.738 0.016 0.1844 -0.5441 -0.4893
2GRM C2 6 0.090 0.815 0.011 1.1631 -0.2289 -0.8340
2GRM C3 7 0.091 0.957 0.014 -0.4473 -0.2423 -0.3223
2GRM C4 8 17.184 1.028 0.009 -0.4822 0.0086 -0.4791
3GRM C1 9 17.189 1.171 0.004 -0.0345 -0.8207 -0.6602
3GRM C2 10 0.095 1.243 0.001 0.1033 0.4238 -0.8983
3GRM C3 11 0.093 1.384 13.990 -0.0426 -0.1083 -0.8554
3GRM C4 12 17.182 1.447 13.983 -0.2814 -0.0363 -0.9146
4GRM C1 13 17.187 1.590 13.974 0.7722 0.4317 -0.4379
4GRM C2 14 0.092 1.664 13.974 -0.5701 0.2915 -0.3098
4GRM C3 15 0.095 1.806 13.967 0.4572 0.1368 0.1921
4GRM C4 16 17.184 1.871 13.967 -0.0747 -0.5492 -0.1254
5GRM C1 17 17.181 2.013 13.968 0.3071 0.9864 -0.8679
我尝试了αғsнιη建议的解决方案,命令是:
awk -F'( )' '{ $NF+=0.5 }1' infile > temp_file && mv temp_file infile
原始文件如下:
1GRM C1 1 0.061 0.071 0.001 0.1992 0.0527 0.1652
1GRM C2 2 0.184 0.142 0.000 0.0664 0.2913 0.0420
1GRM C3 3 0.184 0.284 13.999 -0.2570 0.2834 -0.1888
1GRM C4 4 0.061 0.355 13.997 -0.3396 0.1473 -0.2525
2GRM C1 5 0.061 0.497 13.992 0.2583 0.1408 -0.0812
2GRM C2 6 0.184 0.568 13.988 0.2013 0.2697 -0.6402
2GRM C3 7 0.184 0.710 13.982 -0.1735 0.2672 -0.1291
2GRM C4 8 0.061 0.781 13.986 -0.0882 0.4033 -0.3202
3GRM C1 9 0.061 0.923 13.990 -0.5866 0.4135 0.1416
3GRM C2 10 0.184 0.994 13.991 -0.3780 0.0186 0.0961
输出如下:
1GRM C1 1 0.061 0.071 0.001 0.1992 0.0527 0.6652
1GRM C2 2 0.184 0.142 0.000 0.0664 0.2913 0.542
1GRM C3 3 0.184 0.284 13.999 -0.2570 0.2834 0.3112
1GRM C4 4 0.061 0.355 13.997 -0.3396 0.1473 0.2475
2GRM C1 5 0.061 0.497 13.992 0.2583 0.1408 0.4188
2GRM C2 6 0.184 0.568 13.988 0.2013 0.2697 -0.1402
2GRM C3 7 0.184 0.710 13.982 -0.1735 0.2672 0.3709
2GRM C4 8 0.061 0.781 13.986 -0.0882 0.4033 0.1798
3GRM C1 9 0.061 0.923 13.990 -0.5866 0.4135 0.6416
最后一列的对齐有问题,请问我该如何解决?
答案1
您只需使用:
awk '{ $NF+=0.5; print }' infile
要不就:
awk '{ $NF+=0.5 }1' infile
为了保持列缩进完整,请使用:
awk -F'( )' '{ $NF+=0.5 }1' infile
在 中awk
,NF
是指一行中的字段总数,因此 NF 也将是最后一个字段编号,如果它以运算符开头,$
它将采用该字段的值,然后$NF
将是最后一个字段或列的值。数字1 美元、2 美元、3 美元、4 美元…… 是字段的值#1、#2、#3、#4、…分别。
为了就地保存修改,GNU awk 可以-i inplace
选择执行以下操作:
gawk -i inplace -F'( )' '{ $NF+=0.5 }1' infile
如果您的 awk 无法识别这一点,请将输出保存到临时文件,然后将其重命名为原始文件,例如:
awk -F'( )' '{ $NF+=0.5 }1' infile > temp_file && mv temp_file infile
更新:
awk -F'( )' '{
x=($NF>0?1:0); $NF+=0.5;
$NF=sprintf ("%s%.4f", ((x||$NF<0)?"":" "), $NF);
}1' infile > temp_file && mv temp_file infile
答案2
假设格鲁吉亚是单个制表符分隔的(如果不是,请通过 运行tr -s ' ' '\t'
),并且实用数包裹安装:
paste <(cut -f -8 nvo.gro) <(cut -f 9- nvo.gro | numprocess /+.5/)