Linux Gawk没有过滤掉更大的数字?
我的程序中使用的简单的gawk过滤器没有过滤出比其他值长一位数的值 这是我的文本文件:Linux Gawk没有过滤掉更大的数字?,linux,bash,unix,awk,gawk,Linux,Bash,Unix,Awk,Gawk,我的程序中使用的简单的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 这些列由选项卡
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
这些列由选项卡分隔
我的呆滞脚本:
echo "Enter max price"
read price
gawk -F "\t+" '$5 <= "'$price'"' file
echo“输入最高价格”
阅读价格
gawk-F“\t+”$5您的awk
命令执行词汇比较而不是数字比较,因为RHS(价格值)包含在双引号中
删除双引号会有所帮助,但建议将命令重新格式化如下:
gawk -F '\t+' -v price="$price" '$5 <= price' file
gawk-F'\t+'-v price=“$price””$5您的awk
命令执行词汇比较而不是数字比较,因为RHS(价格值)用双引号括起来
删除双引号会有所帮助,但建议将命令重新格式化如下:
gawk -F '\t+' -v price="$price" '$5 <= price' file
gawk-F'\t+'-v price=“$price””$5你真的要为每一列单独调用一个gawk吗?我们可以做到:
gawk -F "\t+" -v OFS="\t" \
-v city="$city" \
-v bedrooms="$bedrooms" \
-v space="$space" \
-v price="$price" \
-v weeks="$weeks" '
$2 == city && $3 >= bedrooms && $4 >= space && $5 <= price && $6 <= weeks {
$1 = $1; print
}
' listing |
sort -t $'\t' $sortby $ordering |
column -s $'\t' -t
gawk-F“\t+”-v OFS=“\t”\
-v city=“$city”\
-v卧室=“$卧室”\
-v space=“$space”\
-v price=“$price”\
-v weeks=“$weeks””
$2==城市&&$3>=卧室&&$4>=空间&&$5你真的在为每一个专栏单独打电话?我们可以做到:
gawk -F "\t+" -v OFS="\t" \
-v city="$city" \
-v bedrooms="$bedrooms" \
-v space="$space" \
-v price="$price" \
-v weeks="$weeks" '
$2 == city && $3 >= bedrooms && $4 >= space && $5 <= price && $6 <= weeks {
$1 = $1; print
}
' listing |
sort -t $'\t' $sortby $ordering |
column -s $'\t' -t
gawk-F“\t+”-v OFS=“\t”\
-v city=“$city”\
-v卧室=“$卧室”\
-v space=“$space”\
-v price=“$price”\
-v weeks=“$weeks””
$2==城市和$3>=卧室和$4>=空间和$5使用-v
参数在awk@AvinashRaj如何以及在何处使用-v
参数?使用-v
参数在awk@AvinashRaj如何以及在何处使用-v
参数?谢谢,但我需要它才能工作通过多个选项卡,在我的完整脚本中,我用管道将这些呆呆的内容与其他呆呆的内容连接起来,以过滤第3列、第4列和第6列。它们都在我的完整程序中工作,但由于某种原因,只有1500000的价格一直在我的过滤器中滑落。请注意,鉴于上述代码,awk仍然可以决定进行字符串比较,而不是数值比较,因为每个变量的类型都是“数值字符串”因此,awk必须根据上下文和内容猜测是否希望将其视为字符串或数字。确保awk使用数值比较的方法是,无论您在哪里学习使用“$price”
,都要将其写成$5 JoshTree,等等。永远不要再使用该源代码,因为它在这方面完全错误,因此几乎可以肯定其他基本原理是错误的。同样,将AWK与您评论中的管道链接是完全错误的方法(参见@glennjackman-)的答案/评论)。获取Arnold Robbins的《有效的Awk编程》一书,第四版,这样你就可以学习一些Awk基础知识——这将使你的脚本编写生活变得更加轻松。@EdMorton:很好,我们强制使用数字/字符串,谢谢;我已经更新了答案。你的教授是个白痴,换一个新答案:-)。但是,严肃地说,千万不要这样做,因为这会使shell变量扩展为实际awk命令的一部分,因此,考虑到shell变量的各种内容,可能会导致各种奇怪而奇妙的问题。您可以使用awk'{…“$shellvar”“…}”
使其更健壮一些,但完全不要这样做-使用-v awkvar=“$shellvar”
,除非您需要awk'script'$shellvar'
或awk'script'awkvar=“$shellvar”
的某些特定功能。谢谢,但我需要它来处理多个选项卡,在我的完整脚本中,我用管道将这些呆滞与其他呆滞连接起来,以过滤第3列、第4列和第6列。它们都在我的完整程序中工作,但由于某种原因,只有1500000的价格一直在我的过滤器中滑落。请注意,鉴于上述代码,awk仍然可以决定进行字符串比较,而不是数值比较,因为每个变量的类型都是“数值字符串”因此,awk必须根据上下文和内容猜测是否希望将其视为字符串或数字。确保awk使用数值比较的方法是,无论您在哪里学习使用“$price”
,都要将其写成$5 JoshTree,等等。永远不要再使用该源代码,因为它在这方面完全错误,因此几乎可以肯定其他基本原理是错误的。同样,将AWK与您评论中的管道链接是完全错误的方法(参见@glennjackman-)的答案/评论)。获取Arnold Robbins的《有效的Awk编程》一书,第四版,这样你就可以学习一些Awk基础知识——这将使你的脚本编写生活变得更加轻松。@EdMorton:很好,我们强制使用数字/字符串,谢谢;我已经更新了答案。你的教授是个白痴,换一个新答案:-)。但是,严肃地说,千万不要这样做,因为这会使shell变量扩展为实际awk命令的一部分,因此,考虑到shell变量的各种内容,可能会导致各种奇怪而奇妙的问题。您可以使用awk'{…“$shellvar”“…}”
使其更健壮一些,但完全不要这样做-使用-v awkvar=“$shellvar”
,除非您需要awk'脚本“$shellvar”
或awk'脚本“awkvar=“$shellvar”
的某些特定功能。