如何在 first 之后添加一列,该列具有从表达式计算的值。此表达式具有以下形式: (vn+v0)*vl 其中 v0 和 vl 分别是第 3 列的第一个和最后一个元素,而 vn 是该列的第 n 个元素。例如我们有一个文本表:
1 2 3 4
10 20 30 40
100 200 300 400
它应该转换为
1 1800 3 4
10 9900 30 40
100 180000 300 400
谢谢
如何在 first 之后添加一列,该列具有从表达式计算的值。此表达式具有以下形式: (vn+v0)*vl 其中 v0 和 vl 分别是第 3 列的第一个和最后一个元素,而 vn 是该列的第 n 个元素。例如我们有一个文本表:
1 2 3 4
10 20 30 40
100 200 300 400
它应该转换为
1 1800 3 4
10 9900 30 40
100 180000 300 400
谢谢
作为您在问题中定义的规则,最后一行中的数字不应该是180000
. 它应该是 (300+3)*300=90900
这条 awk 行可以为您工作:
awk 'NR==FNR{c[NR]=$3;l=NR;next}{$2=($3+c[1])*c[l]}7' file file
输出是:
kent$ awk 'NR==FNR{c[NR]=$3;l=NR;next}{$2=($3+c[1])*c[l]}7' file file
1 1800 3 4
10 9900 30 40
100 90900 300 400
编辑
OP希望在第一列之后添加一个新列:
kent$ awk 'NR==FNR{c[NR]=$3;l=NR;next}{$2=($3+c[1])*c[l]" "$2}7' file file
1 1800 2 3 4
10 9900 20 30 40
100 90900 200 300 400