【问题标题】:How to use an awk variable from another file如何使用另一个文件中的 awk 变量
【发布时间】:2017-10-31 22:26:17
【问题描述】:

我有两个文件:

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

文件1

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。

我试过了

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

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

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

【问题讨论】:

    标签: bash awk


    【解决方案1】:

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

    【讨论】:

    • {...} 是什么意思?是序列吗?
    • 这是在先验条件为真时运行的语句。 $3 in a
    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2012-12-08
    • 2013-01-12
    • 1970-01-01
    • 2021-09-23
    • 2020-12-31
    相关资源
    最近更新 更多