使用 bash 声明一个最小值后不能减去负数

Cannot subtract negative numbers after declaring one a minimum using bash

我正在编辑的脚本从近 100 个文件中提取数据并将其汇集到一个文件中。我现在正在尝试处理该数据。我可以毫无问题地提取和汇集数据,当需要处理它时,我的问题就来了。

我正在尝试做两件事。我想在第 3 列中找到负数的最小值,然后从第 3 列中的每个值中减去该最小值,并将结果打印在标题为 "rel" 的新列中。目前,我已成功找到最小值,但无法进行减法运算。

我的输入文件(名为 allRE3)如下所示:

file Gibbs kcal
RR0.out -1752.142111    -1099486.696073 
RR1.out -1752.141887    -1099486.555511 
RR4.out -1752.140564    -1099485.725315 
RR3.out -1752.140319    -1099485.571575 
RR5.out -1752.138532    -1099484.450215 
RR6.out -1752.138493    -1099484.425742 

目前,我使用的代码如下所示:

min=`awk 'BEGIN{a=0}{if (<0+a) a=} END{print a}' allRE3` 
awk 'NR == 1 {  = "rel" } NR >= 3 {  =  - $min } 1' < allRE3 >finalE

使用该代码,我将 finalE 作为一个新文件(这是需要的)获取,它具有以下内容:

file Gibbs kcal  rel
RR0.out -1752.142111 -1099486.696073    
RR1.out -1752.141887 -1099486.555511  -1.09949e+06
RR4.out -1752.140564 -1099485.725315  -1.09949e+06
RR3.out -1752.140319 -1099485.571575  -1.09949e+06    

下面是我想要获取的内容,我希望它位于一个名为 "finalE" 的新文件中。

file Gibbs kcal  rel
RR0.out -1752.142111 -1099486.696073  0.00000
RR1.out -1752.141887 -1099486.555511  0.140562
RR4.out -1752.140564 -1099485.725315  0.970758
RR3.out -1752.140319 -1099485.571575  1.124498

awk 不是 bash(或任何其他 shell),它是一个完全不同的工具,有自己的语法、语义和变量。您不能将 shell 变量设置为一个 awk 脚本的输出值,然后在另一个 awk 脚本中使用该 shell 变量。请参阅 http://cfajohnson.com/shell/cus-faq-2.html#Q24 以了解如何在 awk 脚本中使用 的值 shell 变量,但您不需要这样做,因为您应该只使用一个一切的 awk 脚本:

$ cat tst.awk
NR==FNR {
    if ( NR > 1 ) {
        min = ( (NR==2) || ( < min) ?  : min )
    }
    next
}
{ print [=10=], ( FNR==1 ? "rel" : sprintf("%0.6f", - min) ) }

$ awk -f tst.awk file file
file Gibbs kcal rel
RR0.out -1752.142111    -1099486.696073  0.000000
RR1.out -1752.141887    -1099486.555511  0.140562
RR4.out -1752.140564    -1099485.725315  0.970758
RR3.out -1752.140319    -1099485.571575  1.124498
RR5.out -1752.138532    -1099484.450215  2.245858
RR6.out -1752.138493    -1099484.425742  2.270331