gpt4 book ai didi

bash - awk 大于 float

转载 作者:行者123 更新时间:2023-12-03 03:22:48 31 4
gpt4 key购买 nike

我发现了一些与此相关的问题,但没有一个真正回答了我的问题。

我有一个像这样的表格文件:

2   10610   0   0   0   0.0105292
2 10649 0 0 0 0.041959
2 10682 0 0 0 0.0449746
2 10705 0 0 0 0.0441639
2 10797 2 0 0 0.0342728
2 10955 0 0 0 0.0136986
2 10957 0 0 0 0.0135135
2 11124 0 0 0 0.0583367
2 11336 1 0 0 0.0219502

我使用了这个命令:

awk '{if ($6 > 0.4) print $6}' myfile

这是输出:

0.0105292
0.041959
0.0449746
0.0441639
0.0342728
0.0136986
0.0135135
0.0583367
0.0219502

它返回第六列的所有值。在这里我不应该得到任何结果,因为条件不受尊重。所以我猜 awk 不会将 $6 视为 float 。

我尝试了其他语法,但仍然遇到同样的问题。

我还在第一列上尝试了该命令,它正在工作......

ps:我使用的是 MacOSX

编辑:虽然当我使用 awk '{print $6}' 时它可以工作

最佳答案

这是您的区域设置(请参阅 https://www.gnu.org/software/gawk/manual/gawk.html#Locales 特别是 https://www.gnu.org/software/gawk/manual/gawk.html#Locale-influences-conversions ),显式设置 LC_ALL=C 是解决问题的一种方法:

LC_ALL=C awk '{if ($6 > 0.4) print $6}' myfile

发生的情况是,您尝试使用小数点 .,但您的区域设置(在大多数欧洲国家和许多其他国家/地区通常如此)使用 , 代替。因此,当您的输入包含:

0.0105292

awk 不会将其识别为在您的语言环境中看起来像数字,因此它会被视为字符串。如果您的输入是:

0,0105292

然后 awk 会将其识别为数字(因此这是解决问题的另一种方法 - 使用逗号作为输入中的小数点)。

所以 awk 你的代码:

$6 > 0.4

是一个字符串“0.0105292”与数字0.4进行比较(根据POSIX,.始终代码中使用的小数点)以及 gawk 手册中的比较表:

        +----------------------------------------------
| STRING NUMERIC STRNUM
--------+----------------------------------------------
|
STRING | string string string
|
NUMERIC | string numeric numeric
|
STRNUM | string numeric numeric
--------+----------------------------------------------

我们看到,当字符串与数字(或其他任何内容)进行比较时执行的比较类型是字符串比较。

因此,在您的原始代码中,字符串 "0.0105292" 正在与数字 0.4 进行字符串比较,并且 awk 显然决定前者大于后者(我不知道为什么,也许是其他一些语言环境的影响)。

关于bash - awk 大于 float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49861010/

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