【发布时间】:2021-03-07 13:35:52
【问题描述】:
我想使用 awk 在文本文件 data.dat 中以某种顺序进行一些数学运算。 下面给出了一个示例文件,但是,原始文件有 m*n 数组,
-0.00309 300.0000 27.48357484
-0.00309 350.0000 27.48339634
-0.00309 400.0000 27.48309821
-0.00309 450.0000 27.48263481
-0.00309 500.0000 27.48196302
-0.00309 550.0000 27.48104749
-0.00309 600.0000 27.47986237
-0.00309 650.0000 27.47839084
-0.00309 700.0000 27.47662366
-0.00309 750.0000 27.47455745
-0.00309 800.0000 27.47219313
0.83311 50.0000 -15.61462258
0.83311 100.0000 -15.61504028
0.83311 150.0000 -15.61524246
0.83311 200.0000 -15.61547435
0.83311 250.0000 -15.61577002
0.83311 300.0000 -15.61597007
0.83311 350.0000 -15.61588681
0.83311 400.0000 -15.61538590
0.83311 450.0000 -15.61439714
0.83311 500.0000 -15.61289898
0.83311 550.0000 -15.61089993
0.83311 600.0000 -15.60842429
0.83311 650.0000 -15.60550308
0.83311 700.0000 -15.60216876
0.83311 750.0000 -15.59845261
0.83311 800.0000 -15.59438360
第一列从负数开始,在几行之后,它改变了它的符号(+ve)。 当第一列具有 -Ve 符号时,我想将第三列(在原始文件中会有所不同)乘以 1e-14,当第一列具有 +Ve 符号时,我想乘以 0.5e-14。
该文件非常大,所以我无法对其进行手动操作。 我可以使用
在整个文件中应用该操作paste data.dat | awk 'BEGIN{var=ARGV[1];ARGV[1]=""} {print var, $0}' "0.5e-14" | awk '{print $2, $3, $4*$1}'
但这样做我可以一次使用一个操作(用于 -Ve 或用于 +Ve),这不是我的目标。
我想要一个循环,如果第一列是负数,它应该将第三列乘以数字 1e-14,如果第一列是 +Ve,它应该乘以 0.5e-14。
上述文件的预期结果是
-0.00309 300.0000 2.74836e-13
-0.00309 350.0000 2.74834e-13
-0.00309 400.0000 2.74831e-13
-0.00309 450.0000 2.74826e-13
-0.00309 500.0000 2.7482e-13
-0.00309 550.0000 2.7481e-13
-0.00309 600.0000 2.74799e-13
-0.00309 650.0000 2.74784e-13
-0.00309 700.0000 2.74766e-13
-0.00309 750.0000 2.74746e-13
-0.00309 800.0000 2.74722e-13
0.83311 50.0000 -7.80731e-14
0.83311 100.0000 -7.80752e-14
0.83311 150.0000 -7.80762e-14
0.83311 200.0000 -7.80774e-14
0.83311 250.0000 -7.80789e-14
0.83311 300.0000 -7.80799e-14
0.83311 350.0000 -7.80794e-14
0.83311 400.0000 -7.80769e-14
0.83311 450.0000 -7.8072e-14
0.83311 500.0000 -7.80645e-14
0.83311 550.0000 -7.80545e-14
0.83311 600.0000 -7.80421e-14
0.83311 650.0000 -7.80275e-14
0.83311 700.0000 -7.80108e-14
0.83311 750.0000 -7.79923e-14
0.83311 800.0000 -7.79719e-14
该操作将在 gnuplut 脚本中使用。
【问题讨论】: