根据前面的列修改文本列
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 仅适用于给定范围内的行
我有一个文件,其前 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 仅适用于给定范围内的行