Bash 如何使用另一个文件中的awk变量

Bash 如何使用另一个文件中的awk变量,bash,awk,Bash,Awk,我有两个文件: 包含参数中纬度、经度、海拔和百分比变化的文件1 包含高度和平均绝对参数的文件2 文件1 文件2 现在,我需要创建一个包含纬度、经度、海拔和绝对参数的文件。基本上我需要把p变成p(1+a/100),其中p是平均参数,a是百分比变化。生成的文件如下所示: 89.0 -179.0 40.0 4.2920516 我可以使用do while循环或任何其他循环来完成此操作,但对于大文件来说这很耗时。我相信有一个单行awk,我无法理解 我试过了 awk 'FNR==NR{a[NR]=$

我有两个文件:

  • 包含参数中纬度、经度、海拔和百分比变化的文件1
  • 包含高度和平均绝对参数的文件2
文件1

文件2

现在,我需要创建一个包含纬度、经度、海拔和绝对参数的文件。基本上我需要把p变成p(1+a/100),其中p是平均参数,a是百分比变化。生成的文件如下所示:

 89.0 -179.0 40.0 4.2920516
我可以使用do while循环或任何其他循环来完成此操作,但对于大文件来说这很耗时。我相信有一个单行awk,我无法理解

我试过了

awk 'FNR==NR{a[NR]=$2;next}{$4=a[FNR]*(1+$4/100)}1' file2 file1
但只有当两个文件中的高度顺序相同,并且两个文件中的行数相等时,此方法才有效


我想在第一个文件中搜索高度,取相应的平均参数,并将其用作第二个文件的变量。可以这样做吗?

您可以强制使用
+0

$ awk 'NR==FNR  {a[$1+0]=$2; next} 
       $3+0 in a{$4=a[$3+0]*(1+$4/100)}1' file2 file1

89.0 -179.0 40.0 4.29205
89.0 -179.0 50.0 4.30208
89.0 -179.0 70.0 4.33877
89.0 -179.0 90.0 4.35132
87.0 -179.0 40.0 4.26054
87.0 -179.0 50.0 4.27085
87.0 -179.0 70.0 4.31075
87.0 -179.0 90.0 4.33494
85.0 -179.0 40.0 4.28855
85.0 -179.0 50.0 4.29967
85.0 -179.0 70.0 4.32143
85.0 -179.0 90.0 4.34494
83.0 -179.0 40.0 4.34614
83.0 -179.0 50.0 4.36217
83.0 -179.0 70.0 4.37344
83.0 -179.0 90.0 4.37413
81.0 -179.0 40.0 4.36334
81.0 -179.0 50.0 4.37627
81.0 -179.0 70.0 4.38574
81.0 -179.0 90.0 4.37513

{…}是什么意思?它是一个序列吗?它是在前提条件为真时运行的语句<代码>a中的3美元
awk 'FNR==NR{a[NR]=$2;next}{$4=a[FNR]*(1+$4/100)}1' file2 file1
$ awk 'NR==FNR  {a[$1+0]=$2; next} 
       $3+0 in a{$4=a[$3+0]*(1+$4/100)}1' file2 file1

89.0 -179.0 40.0 4.29205
89.0 -179.0 50.0 4.30208
89.0 -179.0 70.0 4.33877
89.0 -179.0 90.0 4.35132
87.0 -179.0 40.0 4.26054
87.0 -179.0 50.0 4.27085
87.0 -179.0 70.0 4.31075
87.0 -179.0 90.0 4.33494
85.0 -179.0 40.0 4.28855
85.0 -179.0 50.0 4.29967
85.0 -179.0 70.0 4.32143
85.0 -179.0 90.0 4.34494
83.0 -179.0 40.0 4.34614
83.0 -179.0 50.0 4.36217
83.0 -179.0 70.0 4.37344
83.0 -179.0 90.0 4.37413
81.0 -179.0 40.0 4.36334
81.0 -179.0 50.0 4.37627
81.0 -179.0 70.0 4.38574
81.0 -179.0 90.0 4.37513