如何用AWK计算梯度

时间:2014-08-04 08:35:47

标签: bash awk

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

A B
1 2
10 20
100 200
.
.
.

我想用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 
.
. 
.

我该怎么做?

1 个答案:

答案 0 :(得分:4)

根据你的文件,你可以这样做:

$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

使用:

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

希望这有帮助