regex - 我正在尝试使用包含“awk”的shell脚本来针对文件运行
问题描述
read -p "Enter the name for the dealer you are searching for: " dealer
read -p "Enter the time of day you are checking for this dealer: " time
echo "$time $dealer" | awk '/$1/'
所以这就是我到目前为止所拥有的。根据我目前所学到的,这会将用户输入的值存储在dealer
and中time
。
我接下来要做的是echo
针对一系列命令的输入,以查看文件是否包含这些输入。
例如,轮盘赌庄家“Billy”每隔一天在“05 AM”工作。要查看给定日期的数据是否包含他的工作日志,我将运行此脚本。
./script
运行文件:
输入您要搜索的经销商的名称:Billy
输入您正在查看该经销商的时间:05
现在这是我正在寻找解决方案的地方。调用脚本时是否对文件运行脚本?我是否让用户输入文件作为第三个参数,然后将其作为脚本内部的值?
如果我学得正确,那么经销商将被存储为 arg1 并由 $1 访问,时间为 $2。
所以我会跑:awk '1$.2$' file
?
这意味着它们之间可以有任何东西,但是如果一行确实包含名称和时间,那么这就是我要搜索的内容。
05:00:00 AM Katey Bean Billy Jones Evalyn Howell
这是我的脚本所需的输出,我知道时间排在第一位,所以我会相应地进行调整,但我正试图更进一步。
解决方案
在从标准输入中读取经销商和时间的输入后,您可以awk
使用以下正则表达式运行:
"^$time.*$dealer"
匹配文件中的行。(您可能需要对其进行调整以适应您的需求,但作为起点应该就足够了)。
至于文件本身,awk
可以从标准输入读取,因此您可以将文件重定向到脚本,如下所示:
./script < data.txt
并awk
像这样运行:
awk -v re="^$time.*$dealer" '$0 ~ re { print $0 }'
这样awk
将从标准输入中读取文件内容。
或者,您可以提供文件名作为参数,如下所示:
./script data.txt
并awk
像这样运行:
awk -v re="^$time.*$dealer" '$0 ~ re { print $0 }' "$1"
文件名在哪里$1
。
您还可以使用等效的调用grep
(在这种情况下更简洁!):
grep "^$time.*$dealer" "$1"
推荐阅读
- c# - 如何使用 .NET3.5 从 32 位应用程序中读取 64it 注册表
- android - 如何使用 navigatio 和 dagger2 制作片段单例?
- google-apps-script - 使用 Google Apps 脚本填写 Google 表单
- php - 在 Yii2 应用中获取所有路由(模块、控制器、动作)
- python - 如何实现将文件路径作为参数并根据python中的查询字符串显示文本列表的函数?
- c++ - sfml 窗口的 Texture.cpp(98) 向量中的内部 OpenGL 调用失败
- entity-framework-6 - 如何使用ef6.exe
- java - 仅当字段位于嵌套对象中时,Gson 才序列化空值
- excel - 使用固定字母和数字进行 Excel 数据验证
- javascript - 点击输入时Vue.js丢失数据