文本处理中 - 在特定列的所有行上,如何做一个简单的数学运算?

分享于 

2分钟阅读

ubuntu

 

问题:

我有一个nvt.gro的文本文件,想在最后一列的所有行上加0.5 (+0.5):

文件如下所示:


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




答案1:

假设nvo.gro单制表符分隔的tr -s ' ' 't'


paste <(cut -f -8 nvo.gro) <(cut -f 9- nvo.gro | numprocess /+.5/)




答案2:

你只需使用:


awk '{ $NF+=0.5; print }' infile



或者只是:


awk '{ $NF+=0.5 }1' infile



要保持列缩进不变,请使用:


awk -F'( )' '{ $NF+=0.5 }1' infile





COL  文本  PROC  MAT  spec  Opera  
相关文章