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

通过带有awk的表达式添加从另一列派生的列,awk,Awk,如何在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系

如何在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

你能解释一下你是如何到达180000的吗?我使用了上面的命令,但它代替了第二列而不是添加。如何解决这个问题?awk行的@ATOf给出的输出与您在问题中的预期结果相同。请仔细检查一下。如果你想“添加”,你应该让我们知道在哪里添加。先编辑你的问题@若要查看编辑,请在第一列之后添加一个新列。当我有多个.dat文件时,如何执行上述操作?