【发布时间】:2014-12-14 19:20:57
【问题描述】:
基本思想是这样的。假设您想使用 awk 从管道中搜索文件中的多个模式:
... | awk -f - '{...}' someFile.txt
* '...' 只是一些代码的缩写
* '-f -' 表示模式取自管道
有没有办法知道在 awk 脚本中的每个时刻搜索哪种模式
(就像您知道 $1 是第一个字段一样,是否有类似 $PATTERN 的内容包含当前模式
搜索或获得类似内容的方法?
详细说明:
如果我有 2 个文件:
someFile.txt 包含:
1
2
4
patterns.txt 包含:
1
2
3
4
运行这个命令:
cat patterns.txt |awk -f - '{...}' someFile.txt
我应该在大括号之间键入什么,以便只有 patterns.txt 中的模式
has not been match in someFile.txt 打印出来了?(这种情况下patterns.txt中的数字3不匹配)
【问题讨论】:
-
要获取“只有
patterns.txt中没有在someFile.txt中匹配的模式”,请尝试grep -v someFile.txt patterns.txt -
我想在这里明确使用awk。
-
您是否正确使用
awk的选项。根据手册页-f指定要执行的脚本,因此以下-只是从标准输入获取脚本,而不是将其作为第一个非选项参数(您也提供)。将patterns.txt传递给awk的IHMO 将导致将someFile.txt的每一行传递给标准输出的次数与patterns.txt中的非零模式一样多。这可以通过将两个文件作为正常输入提供给awk并提供适当的脚本来解决。帽子会有帮助吗?