问题描述
我有一个文件,其中包含用“:”分隔的模式和消息。
pattern1:First pattern
pattern12:Second pattern
pat1:Short pattern
pat12:Short pattern 2
如果我这样跑:
awk -F: '$1~/pat1/ {print $2}' file
它可以完美过滤并提供输出:
Short pattern
Short pattern 2
但是实际上我想获取与提供的字符串匹配的模式消息。假设我有一个字符串example string with pattern12 substring inside
,我希望得到:
First pattern
Second pattern
因为文件中的两个模式与我的字符串匹配。不幸的是,
awk -F: '$1~/example string with pattern12 substring inside/ {print $2}' file
都不是
awk -F: '"example string with pattern12 substring inside"~/$1/ {print $2}' file
为我工作。
有没有一种方法可以使用这些简单漂亮的过滤器来实现此目的,而无需在awk程序主体中移动检查?
现在,我调用bash脚本并将字符串作为参数传递:
script.sh "example string with pattern12 substring inside"
script.sh:
#!/bin/bash
while IFS=: read pattern message
do
grep -qe "$pattern" <<< $1 && break
done < fie
但是我想使用awk
而不是grep
,因为它不仅可以同时过滤多个字段,而且还可以算术地过滤多个字段:pattern >= 256
解决方法
是这样吗?:
$ awk -F: '"example string with pattern12 substring inside"~$1 {print $2}' file
输出:
First pattern
Second pattern
如果没有,那么@ RavinderSingh13在上面问的是什么。