我有一个包含两列的文件,例如:
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)
我怎样才能做到这一点?
根据您的文件,您可以执行以下操作:
$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}将值保存在a和b, 中用于下一行。这部分从第一行开始工作{print a,b,($2-b)/($1-a)}打印上一行以及该行与上一行之间的渐变希望这可以帮助