如何用AWK计算梯度

Hos*_*FGM 3 bash awk

我有一个包含两列的文件,例如:

A B
1 2
10 20
100 200
.
.
.
Run Code Online (Sandbox Code Playgroud)

我想通过 awk 计算梯度(或斜率)dB/dA。这意味着第三列应该是 B 列中每个相邻行之间的差值除以 A 列中每个相应相邻行之间的差值。上述日期的结果应该是:

A B dB/dA
1 2 (20-2)/(10-1)=2
10 20 (200-20)/(100-10)=2
100 200 
.
. 
.
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

jrj*_*rjc 5

根据您的文件,您可以执行以下操作:

$cat file
A B
1 2
10 20
100 200


awk 'BEGIN{OFS="\t"}NR==1{print $1,$2,"dA/dB"}NR>2{print a,b,($2-b)/($1-a)}{a=$1;b=$2}' file
A   B   dA/dB
1   2   2
10  20  2
100 200 2
Run Code Online (Sandbox Code Playgroud)

和 :

  • BEGIN{OFS="\t"}将输出字段分隔符设置为制表符
  • NR==1{print $1,$2,"dA/dB"}复制标题并添加 grad 列
  • NR>2跳过标题和第一行,因为您想从第二行(值)开始
  • {a=$1;b=$2}将值保存在ab, 中用于下一行。这部分从第一行开始工作
  • {print a,b,($2-b)/($1-a)}打印上一行以及该行与上一行之间的渐变

希望这可以帮助