【发布时间】:2020-10-23 23:56:11
【问题描述】:
我想知道是否有一种方法可以使用 AWK 或 SED 来查找高于您在文件中为脚本提供的参数的某些值。这就是
./script.sh CITY VALUE
在这种情况下,值是 $2 或第二个参数,它将成为我们搜索的基础,所以如果我们有一个文件,
dummy2.txt
格式:姓名;身份证;职业;邮箱;评分;访问次数;余额
John Trevolta;12334;dentist;gmail;0;0;431
Isabella;4567;dentist;gmail;0;0;400
如果我们输入,
./script.sh CITY 400
它应该能够从这个精确的 dummy2.txt 中读取每一列(在这种情况下为第七列($7))并输出它找到高于我们给它的值的次数,因此所需的输出将是:
1
但我给出的当前输出如下:
1 John Trevolta;12334;dentist;gmail;0;0;431
因此,这是我当前的代码:
#!/bin/bash
if [ "$#" -eq 0 ]
then
echo "Please insert arguments"
exit 1
elif [ "$#" -lt 2 ] || [ -z "$1" ]
then
echo "Error 404: No arguments found"
exit 1
else
grep -c "$1" dummy.txt
awk -v x=$2 '$7>x{ i++ }END{ print "Found:" i }' dummy2.txt
fi
我已经添加了一些在 cmets 中找到的建议,但不幸的是,它只会打印出来,
Found:
它没有开始计算 i 甚至说它的价值。我不知道我是否需要初始化它,是否需要在其上放置 ''/""/$ 以供读取。
【问题讨论】:
-
"$7 -gt $Arg2"不是有效的 awk 表达式... -
感谢您的提醒!你觉得我应该在里面放什么?
-
类似
awk -F; '$7>x' x="$var1" dummy2.txt ... -
很少需要从 shell 脚本调用
awk。如果你使用awk——它通常可以处理整个程序。 -
if [awk -F';' "$7 -gt $Arg2"]包含如此多的错误假设和错误,令人难以置信。[的参数应该是单个字符串,它将检查该字符串是否为空;你绝对需要在[和它的参数之间有一个空格;但显然字符串awk等不是空的。if awk -F';' -v value="$Arg2" '$7 <= value { exit 1 } END { exit 0 }'在语法上是有意义的,但不清楚 Awk 应该读取哪个文件作为其标准输入。