AWK 将第二列用负号替换为特定行中的第一数据

AWK 将第二列用负号替换为特定行中的第一数据

我想获取第一列上的第一个数据(即:1.20E-05),并将整个第二列用负号替换为第一个数据。然后,我想删除最后一个数据行并打印到新文件。

我有如下数据:

body comments Vxx yy zz 0 pwl (

 1.20E-05 1
 1.21E-05 1.1
 1.22E-05 1.2
 1.23E-05 1.3
 1.24E-05 0 +)

预期输出:

body comments Vxx yy zz 0 pwl (

 0.00E-05 1
 0.01E-05 1.1
 0.02E-05 1.2
 0.03E-05 1.3 +)

答案1

问题不太清楚。根据我的理解,这会让你走多远:

awk '
NR==1   {print
         next}
NR==2   {Subtrahend = $1
        }
        {if (Prev) print Prev
         $1   = sprintf("%.2g", $1-Subtrahend)
         Prev = $0
        }
END     {print $NF
        }' file
body comments Vxx yy zz 0 pwl (
0 1
1e-07 1.1
2e-07 1.2
3e-07 1.3
+)

打印标题行后,它会保存第 2 行中所需的减数,然后从所有行的第一个字段中减去它。使用 Prev 变量会将打印输出推迟一行,因此可以跳过/删除最后一行(除了+))。

格式化是另一回事。如果需要的话,您需要在那里付出一些努力/处理。

相关内容