我有一个包含两列的文件,例如:
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
.
.
.
我该怎么做?
答案 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}
保存a
和b
中的值,用于下一行。这部分适用于第1行{print a,b,($2-b)/($1-a)}
打印上一行以及此行与上一行希望这有帮助