gpt4 book ai didi

linux - gawk 不会过滤掉更大的数字吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:44 24 4
gpt4 key购买 nike

我在我的程序中使用的简单 gawk 过滤器没有过滤掉比其余部分长一个数字的值。

这是我的文本文件:

172 East Fourth Street      Toronto     4   1890    1500000     6
2213 Mt. Vernon Avenue Vaughn 2 890 500000 4
One Lincoln Plaza Toronto 2 980 900000 1

列由制表符分隔。

我的 gawk 脚本:

echo "Enter max price"
read price

gawk -F "\t+" '$5 <= "'$price'"' file

如果我输入 150001 或更大的值,则会出现 1500000 值。我认为这与 gawk 没有正确读取最后一位数字有关。我不允许更改原始文本文件,我需要使用 gawk 命令。任何帮助表示赞赏!

最佳答案

你的 awk命令执行词法比较而不是数值比较,因为RHS(价格值)包含在双引号中。

删除双引号会有所帮助,但建议按如下方式重新表述命令:

 gawk -F '\t+' -v price="$price" '$5 <= price' file

shell 变量 $price现在使用 -v 传递给 Awk , 作为 Awk 变量 price ,这是将值传递给 awk 的安全方式- 然后您可以使用-quoted awk脚本,而不必拼接 shell 变量,也不必担心哪些部分可能会被 shell 预先扩展。

事后思考:正如 Ed Morton 在评论中指出的那样,确保字段或变量被视为数字 , 追加 +0对它;例如,$5 <= price+0 (相反,附加 "" 以强制处理为字符串)。
默认情况下,Awk 从涉及的值和上下文中推断是将给定值解释为字符串还是数字 - 这可能并不总能给出所需的结果。

关于linux - gawk 不会过滤掉更大的数字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34100222/

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