awk在模式之间找到并扩展变量

时间:2013-11-18 09:56:35

标签: bash awk

我有两个关于“awk”的问题。在bash脚本中,我想从两个模式之间的文件中提取与“found”一词匹配的行。我用这个:

awk '/$Pattern START/ {p=1} p && /found/ {print "line_"NR": "$0}; /$Pattern OK/ {p=0}' file2.txt

问题:

1. The variable Pattren is not expanded in the syntax presented
2. I want to specify with "or" multiple end patterns something like this:
 awk '/$Pattern START/ {p=1} p && /found/ {print "line_"NR": "$0}; /$Pattern {OK,NOT}/ {p=0}' file2.txt

感谢。

3 个答案:

答案 0 :(得分:1)

您需要声明变量才能在awk中使用它们 以下是打印其中包含home的所有行的两个示例

pattern="home"
awk -v pat="$pattern" '$0~pat'

awk '$0~pat' pat="$pattern"

对于OP数据,它将是:

awk -vpat="$Pattern" '$0~pat" START" {p=1} p && /found/ {print "line_"NR": "$0} $0~pat" (OK|NOK)" {p=0}' file2.txt

答案 1 :(得分:0)

在这种情况下,您可以使用grepsed代替awk

grep "found" file|sed "s/.*pattern1\(.*\)pattern2.*/\1/g"

答案 2 :(得分:-1)

工作:

1. awk '/'$Pattern' START/ {p=1} p && /found/ {print "line_"NR": "$0}; /'$Pattern' OK/ {p=0}' file2.txt
2. awk '/'$Pattern' START/ {p=1} p && /found/ {print "line_"NR": "$0}; /'$Pattern' OK|NOK/ {p=0}' file2.txt