添加一个列,该列通过带有awk的表达式从另一列派生

时间:2013-07-17 14:38:42

标签: awk

如何在首先添加列,其中包含从表达式计算的值。此表达式具有以下形式:(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

感谢

1 个答案:

答案 0 :(得分:1)

作为您在问题中定义的规则,最后一行中的数字不应为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