我想获取第一列上的第一个数据(即: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 变量会将打印输出推迟一行,因此可以跳过/删除最后一行(除了+)
)。
格式化是另一回事。如果需要的话,您需要在那里付出一些努力/处理。