我在一台装有cygwin的windows电脑上使用gawk。我要做的是从三列中找出min和max,其中两列是经度和经度,第三列是值。
代码如下:
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 最小和最大值对于经度和后度是相同的。如何比较实数?
发布于 2010-11-06 14:04:23
我相当确定这条线
'gawk "BEGIN {minc =1000} {minlo=1000} {minla=1000}并不是你想的那样。(坦率地说,我对它的编译感到惊讶,我不认为它在Kernighan AWK中会有。)这里发生的很多事情实际上都是在Window BAT文件中发生的?
但这里有一些猜测。
minc,然后在每次读取一行时设置minlo和minla。更好的是。
'BEGIN { minc = 1000; minlo = 1000; minla = 1000; } ....甚至是
'BEGIN { minc = minlo = minla = 1000; } ....Ack,试图这样做,作为对一条评论的回答。不行。
第一行不起作用的原因是AWK行的形式
PATTERN { code }其中PATTERN是标识代码部分操作的一组输入记录(通常是行)的某个表达式。有一些特殊的情况,例如BEGIN,它在第一次读取之前“匹配”。另一种特殊情况是空模式,它匹配每一行。所以你所拥有的被解释为
BEGIN {minc =1000}
{minlo =1000}
{minla =1000}因此,在处理第一行输入之前,minc被设置为1000。然后,在每一个输入行上,将minlo和minla设置为1000。我的版本,因为它们都在BEGIN行中进行初始化,所以只初始化值一次。
https://stackoverflow.com/questions/4062283
复制相似问题