所以我正在处理一个名为cars的文件,这里是它的内容:
toyota corolla 1970 2500 chevy malibu 1999 3000 ford mustang 1965 10000 volvo s80 1998 9850 ford thundbd 2003 10500 chevy malibu 2000 3500 honda civic 1985 450 honda accord 2001 6000 ford taurus 2004 17000 toyota rav4 2002 750 chevy impala 1985 1550 ford explor 2003 9500
我使用grep来过滤包含特定汽车制造商的行,然后将它们传递给我的awk语句,最后将最终结果传递给一个带有三通的新pipe道。
以下是我遇到的代码行:
grep "$model" cars | awk '($3+0) >= ("'$max_year'"+0) && ($4+0) <= ("'$max_price'"+0)' | tee last_search
我以前在脚本中将variablesmax_year和max_price定义为用户input。
在SED / AWK / Perl中单行添加条件在FASTA文件中join换行符
bash:如何从文件中提取数千个非连续的行
Python从csv中删除负数条目/行
如何在复杂的文本文件Awk段落?
用逗号分隔,用AWK或SED标记下面的标签
文件last_search被创build,但是它总是空的。
如何将file1的每一列附加到file2的特定字段并创build一个新的输出文件?
如何根据给定数量的字母显示单词?
匹配模式,插入模式,直到下一个匹配
awk认为双引号string作为一个标记,并忽略之间的空间
awk脚本中的$ 0和$ 1是什么?
你的变量几乎肯定有问题,你应该把它们打印出来,逐个建立一个管道,一次调试一次。
就目前而言,对于以下值来说,它可以正常工作:
$ max_year=2000 $ max_price=10000 $ model=a $ grep "$model" cars toyota corolla 1970 2500 chevy malibu 1999 3000 ford mustang 1965 10000 chevy malibu 2000 3500 honda civic 1985 450 honda accord 2001 6000 ford taurus 2004 17000 toyota rav4 2002 750 chevy impala 1985 1550 $ grep "$model" cars | awk '($3+0) >= ("'$max_year'"+0) && ($4+0) <= ("'$max_price'"+0)' chevy malibu 2000 3500 honda accord 2001 6000 toyota rav4 2002 750
还有更好的方法来做,而不必像你那样管理你的命令字符串,因为它可能容易出错。 您可以使用:
grep "$model" cars | awk -vY=$max_year -vP=$max_price '$3>=Y&&$4<=P{print}'
(你会注意到我没有在那里使用string+0技巧,GNU awk ,你几乎可以肯定地在Linux下使用,处理就好了,如果两个参数本质上都是数字的话,它将在数字上进行比较)。
set -a model=malibu max_year=2000 max_price=4000 awk ' $2 == ENVIRON["model"] && $3 >= ENVIRON["max_year"] && $4 <= ENVIRON["max_price"] ' cars | tee last_search
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。