我有两个关于“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
感谢。
答案 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)
在这种情况下,您可以使用grep
和sed
代替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