gpt4 book ai didi

cmd - Gawk 上的实数

转载 作者:行者123 更新时间:2023-12-04 06:42:38 25 4
gpt4 key购买 nike

我在带有 cygwin 的 Windows 计算机上使用 gawk。
我想要做的是从三列中找到最小值和最大值,两列是纬度和经度,第三列是值。

这是代码:

echo off    
for /f "tokens=1,2,3 delims= " %%a in
('gawk "BEGIN {maxc = 0} {maxlo=0} {maxla=0}
{if ($3>maxc) maxc=$3} {if ($1>maxlo) maxlo=$1} {if ($2>maxla) maxla=$2} END
{print maxc, maxlo, maxla}" %file%.projected')
do (
set maxc=%%a
set maxlo=%%b
set maxla=%%c
)
echo max is %maxc%
echo max is %maxla%
echo max is %maxlo%

for /f "tokens=1,2,3 delims= " %%a in
('gawk "BEGIN {minc =1000} {minlo=1000} {minla=1000}
{if ($3<minc) minc=$3} {if ($1<minlo) minlo=$1} {if ($2<minla) minla=$2} END
{print minc, minlo, minla}" %file%.projected')
do (
set minc=%%a
set minlo=%%b
set minla=%%c
)
echo min %minc%
echo min %minla%
echo min %minlo%

我得到的是:
max is 465.053890    
max latitude is 31.846428
max is 34.877658
min 19.976970
min 31.846428
min 34.877658

lon 和 lat 的最小值和最大值相同。
如何比较实数?

最佳答案

我有理由确定这条线

'gawk "BEGIN {minc =1000} {minlo=1000} {minla=1000}

不会做你认为它会做的事情。 (坦率地说,我对它的编译感到震惊,我不认为它会出现在 Kernighan AWK 中。)这里发生的很多事情实际上都在,什么,一个窗口 BAT 中。文件?

但这里有一些猜测。
  • 我想我上面引用的那句话是minc在开始时间,然后设置 minlominla每次读取一行。最好是

  • .
     'BEGIN { minc = 1000; minlo = 1000; minla = 1000; } ....

    甚至
     'BEGIN { minc = minlo = minla = 1000; } ....
  • 在 AWK 中,您必须注意比较,因为如果您不小心,它会将您的数字强制转换为字符串并进行字符串比较(即词典排序)而不是数字比较。

  • Ack,试图将其作为对评论的回答。不行。

    第一行不起作用的原因是 AWK 行具有以下形式
    PATTERN { code }

    其中 PATTERN 是一些表达式,用于标识代码部分操作的一组输入记录(通常是行)。有一些特殊情况,例如 BEGIN ,在第一次读取之前“匹配”。另一个特殊情况是空模式,它匹配每一行。所以你所拥有的被解释为
    BEGIN {minc  =1000}
    {minlo =1000}
    {minla =1000}

    因此,在处理第一行输入之前, minc设置为 1000。接下来,在每个输入行上, minlominla设置为 1000。我的版本,因为它们都在 BEGIN 中进行初始化行,只需初始化一次值。

    关于cmd - Gawk 上的实数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062283/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com