根据前面的列修改文本列

Modify text column based on the column before it

我有一个文件,其前 28 行只是单词。从第 29 行到第 100 行,我有 A、B 和 C 原子的位置信息,以及它们的 3d 坐标。现在我想做的是以与第 29-100 行的 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

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 数组
  • -l 添加换行符到 print
  • 4 * atan2 1, 1 是 π
  • 29 .. 100 仅适用于给定范围内的行