![如何创建一个 Bash 脚本,该脚本可以在文件中搜索字符串并获取该字符串的数值并与另一个值进行比较](https://linux22.com/image/1156858/%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%20Bash%20%E8%84%9A%E6%9C%AC%EF%BC%8C%E8%AF%A5%E8%84%9A%E6%9C%AC%E5%8F%AF%E4%BB%A5%E5%9C%A8%E6%96%87%E4%BB%B6%E4%B8%AD%E6%90%9C%E7%B4%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%B9%B6%E8%8E%B7%E5%8F%96%E8%AF%A5%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%95%B0%E5%80%BC%E5%B9%B6%E4%B8%8E%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%80%BC%E8%BF%9B%E8%A1%8C%E6%AF%94%E8%BE%83.png)
我试图创建一个 bash 脚本来执行此操作
我有一个文本文件...
- 文件输出可能不具有正确的结构。
需要检查该文件是否包含字符串
test
。如果是,则获取与该字符串关联的数值....
"test : 201"
将该值与另一个参考数字 100 进行比较
100 是用户输入的值。if 201> 100
这样做..
否则
这样做..
我怎样才能实现这个目标?
答案1
我认为您正在寻找一个可以接受两个参数(文件名和参考编号)的 shell 脚本。我们将文件称为 F,将参考编号称为 R。
如果文件 F 包含一行形式test : N
,其中 N 是数字,并且您希望在 N > R 时执行某些操作,在 N <= R 时执行替代操作。
如果我正确理解了这个问题,这个 shell 脚本应该可以解决问题:
matching=$(grep "test" $1 | head -n 1 | cut -d ":" -f 2)
if [ -z $matching ]; then
echo "no matching lines!" >&2
else
trimmed=$(echo $matching | xargs)
if [ $trimmed -gt $2 ]; then
echo "greater"
else
echo "less than or equal to"
fi
fi
假设你将其保存在名为的文件中myscript
。然后你可以运行./myscript input.txt 100
,如果input.txt
包含类似于以下内容的行,则test : 52
你将看到less than or equal to
它回显到标准输出。
更新:提问者在评论中列出了另一种情况,即一个文件中可能有多行匹配test : n
。需要选择与之关联的最大值test
并将其与引用进行比较。只需修改脚本中的第一行:
matching=$(grep "test" $1 | cut -d ":" -f 2 | sort -gr | head -n 1)
后续行与前面相同。