Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Gawk没有过滤掉更大的数字?_Linux_Bash_Unix_Awk_Gawk - Fatal编程技术网

Linux 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 这些列由选项卡

我的程序中使用的简单的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
这些列由选项卡分隔

我的呆滞脚本:

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”
的某些特定功能。