【发布时间】:2013-08-31 17:34:06
【问题描述】:
不知何故,具体化并不能很好地转化为标题。
这是我的目标,在 cygwin 环境中使用 BASH 脚本:
- 读取文本文件 $filename 以获取模式和表名列表
- 获取架构和表名列表并在 $lookup_file 中找到匹配项以获取值
- 使用该值进行逻辑选择
我基本上让每个项目单独工作。我只是不知道如何将它们粘合在一起。
第一步是
grep $search_string $filename | awk '{print $1, $5}' | sed -e 's~"~~g' -e 's~ ~\t~g'
其中给出了架构{tab}表的列表
第二步是
grep -e '{}' $lookup_file | awk '{print $3}'
其中 $lookup_file 是架构{tab}表{tab}值
第三步基本上就是根据返回的值,做“某事”;提交报告、通过电子邮件发送警告、忽略它等等。
我尝试将第一部分和第二部分与 xargs 连在一起,但它会将架构和表名视为文件名并引发错误。
我缺少的胶水是什么?还是有更好的方法?
【问题讨论】:
-
awk可以自己做 grepping,你不需要用管道grep给它。而且它也可以自己替换,不需要通过管道传递给 sed。 -
请不要忘记引用文件名。喜欢
grep "$search_string" "$filename"和grep -e '{}' "$lookup_file" -
我实际上可以想到一个解决方案,但我很好奇
""之间的数据是如何放置的。它们可以包含空格吗?其他领域呢?他们也放在""附近吗?它们是用空格还是制表符分隔的? -
既然人们在问,这里有一个来自 $filename; 的示例行。
schema{space}-{space}text{space}search_string{space}"table"。请注意,只有表名用引号括起来。文本不会包含任何需要担心的额外空格