根据之前的列修改文本列

时间:2016-05-29 20:45:09

标签: linux multiple-columns

我有一个文件,其前28行只是单词。从第29行到第100行,我有A,B和C原子的位置信息,以及它们的3d坐标。现在我想做的是以与第29行的Y(第3列)相关的方式更改Z(第4列):

Z = Z + sin(Y / 10 * Pi)。这可能就在终端吗?感谢。

A 0.016333 0.003203 0.472723
A 0.016333 0.035228 0.472723
B 0.016333 0.067253 0.472723 
B 0.016333 0.099278 0.472723 
C 0.016333 0.131303 0.472723 
C 0.016333 0.163328 0.472723

1 个答案:

答案 0 :(得分:1)

Perl解决方案:

perl -lane '$F[3] += sin($F[2]/10 * 4 * atan2 1, 1) if 29 .. 100;
            print "@F"
           ' input_file > output_file
  • -n逐行读取输入行
  • -a将空格上的每一行拆分为@F数组
  • -lprint
  • 添加换行符
  • 4 * atan2 1, 1是π
  • 29 .. 100仅适用于给定范围内的行