Bash 如何用AWK计算梯度

Bash 如何用AWK计算梯度,bash,awk,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 . . . 我如何才能做到这一点?给定您的文件,您可以执行以下操作: $cat file A B 1 2 10 20 100 200

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

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 
.
. 
.

我如何才能做到这一点?

给定您的文件,您可以执行以下操作:

$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”}
    将输出字段分隔符设置为tab
  • NR==1{print$1,$2,“dA/dB”}
    复制标题并添加grad列
  • NR>2
    从第二行(值)开始跳过标题和第一行
  • {a=$1;b=$2}
    保存
    a
    b
    中的值,供下一行使用。这部分从第1行开始工作
  • {print a,b,($2-b)/($1-a)}
    打印上一行以及该行与上一行之间的渐变

希望这对您有所帮助

鉴于您的文件,您可以这样做:

$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”}
    将输出字段分隔符设置为tab
  • NR==1{print$1,$2,“dA/dB”}
    复制标题并添加grad列
  • NR>2
    从第二行(值)开始跳过标题和第一行
  • {a=$1;b=$2}
    保存
    a
    b
    中的值,供下一行使用。这部分从第1行开始工作
  • {print a,b,($2-b)/($1-a)}
    打印上一行以及该行与上一行之间的渐变

希望这有帮助

谢谢。如何添加标题?使用
NR==1{print$0,“dB/dA”}添加标题
谢谢。如何添加标题?使用
NR==1{print$0,“dB/dA”}添加标题