寻求有关如何在一个文件中搜索另一个文件中所有出现的列表并将其输出到结果文件的建议。
正在搜索的源文件是来自 DNS 服务器的短名称、FQDNS(A 记录和 CNAME)列表。输入文件是一个短名称列表,我想匹配任何出现的情况。例如,如果搜索列表包含:
host123
我希望它找到包含该内容的所有记录,例如:
host123.example.com
host123-idrac.example.com
host123-backup.example.com
test-cname.example.com > host123.example.com
我对这种事情有点陌生,所以虽然我也许可以用 grep 来做到这一点,但我希望学习一种不同的、也许更优雅的方法来做到这一点。
答案1
我认为 grep 是正确的选择,为了提高效率,您可以使用“grep -f”,它比放置 for 循环或类似的东西更快。您可以使用 awk 只是为了好玩,也可以使用 2 个嵌套的 for 循环
grep -f search_list_file database_file
答案2
如果你搜索的模式在文件中占一行,比如说patterns
,搜索的文件名为searched_file
,结果将转储到result.out
:
$ awk 'FNR==NR {a[tolower($0)]=1;next} {for (i in a) if(index(tolower($0),i)) print }' \
patterns searched_file > result.out
不区分大小写的搜索改编自回答作者:JamesBrown,位于 stackoverflow.com。这是在 上测试过的bash
。