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

时间:2017-10-31 12:48:14

标签: bash awk

我有两个文件:

  • File1包含参数中的纬度,经度,海拔高度和百分比变化
  • 包含海拔高度和平均绝对参数的File2。

File1中

89.0 -179.0 40.0 -1.9290
89.0 -179.0 50.0 -1.7720
89.0 -179.0 70.0 -0.8970
89.0 -179.0 90.0 -0.4020
87.0 -179.0 40.0 -2.6490
87.0 -179.0 50.0 -2.4850
87.0 -179.0 70.0 -1.5370
87.0 -179.0 90.0 -0.7770
85.0 -179.0 40.0 -2.0090
85.0 -179.0 50.0 -1.8270
85.0 -179.0 70.0 -1.2930
85.0 -179.0 90.0 -0.5480
83.0 -179.0 40.0 -0.6930
83.0 -179.0 50.0 -0.4000
83.0 -179.0 70.0 -0.1050
83.0 -179.0 90.0 0.1200
81.0 -179.0 40.0 -0.3000
81.0 -179.0 50.0 -0.0780
81.0 -179.0 70.0 0.1760
81.0 -179.0 90.0 0.1430

文件2

40.0000000       4.3764738518518698
50.0000000       4.3796847037037017
70.0000000       4.3780389444444472
90.0000000       4.3688861728394963

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

 89.0 -179.0 40.0 4.2920516

我可以使用do while循环或任何其他循环来执行此操作,但对于大文件来说却很耗时。我相信有一个我无法弄清楚的单线问题。

我试过

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

但是这个只有当两个文件中的高度顺序相同且两个文件的行数相同时才有效。

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

1 个答案:

答案 0 :(得分:2)

您可以强制与+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