首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gawk上的实数

gawk上的实数
EN

Stack Overflow用户
提问于 2010-10-31 15:59:16
回答 1查看 163关注 0票数 2

我在一台装有cygwin的windows电脑上使用gawk。我要做的是从三列中找出min和max,其中两列是经度和经度,第三列是值。

代码如下:

代码语言:javascript
复制
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%    

我得到的是:

代码语言:javascript
复制
max is 465.053890    
max latitude is 31.846428    
max is 34.877658    
min 19.976970    
min 31.846428    
min 34.877658    

最小和最大值对于经度和后度是相同的。如何比较实数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-06 14:04:23

我相当确定这条线

代码语言:javascript
复制
'gawk "BEGIN {minc =1000} {minlo=1000} {minla=1000}

并不是你想的那样。(坦率地说,我对它的编译感到惊讶,我不认为它在Kernighan AWK中会有。)这里发生的很多事情实际上都是在Window BAT文件中发生的?

但这里有一些猜测。

  • 我认为我上面引用的这行代码在开始时设置minc,然后在每次读取一行时设置minlominla。更好的是

代码语言:javascript
复制
 'BEGIN { minc = 1000; minlo = 1000; minla = 1000; } ....

甚至是

代码语言:javascript
复制
 'BEGIN { minc = minlo = minla = 1000; } ....

  • 在AWK中,你必须小心比较,因为如果你不小心,它会将你的数字强制为字符串,并进行字符串比较(即字典排序),而不是数字比较。

Ack,试图这样做,作为对一条评论的回答。不行。

第一行不起作用的原因是AWK行的形式

代码语言:javascript
复制
PATTERN { code }

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

代码语言:javascript
复制
BEGIN {minc  =1000}
      {minlo =1000}
      {minla =1000}

因此,在处理第一行输入之前,minc被设置为1000。然后,在每一个输入行上,将minlominla设置为1000。我的版本,因为它们都在BEGIN行中进行初始化,所以只初始化值一次。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4062283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档