如何匹配file.txt中的PARAM (PARAM =name) word并打印
之间的行NAMEx和NAMEy,通过awk,如下所示:
如果在file.txt中匹配PARAM,那么awk将只打印接近的NAMES字符串之间的单词,而PARAM是其中一个名称
备注1 PARAM可以是任何名字,如Pitter, Bob等.....
备注2 awk将得到PARAM=(任何名称)
备注:我们不知道(#到NAME)之间有多少空格
more file.txt
# NAMES1
Pitter 23
Bob 75
# NAMES2
Donald 54
Josef 85
Patrick 21
# NAMES3
Tom 32
Jennifer 85
Svetlana 25
# NAMES4
示例(关于file.txt内容)
In case PARAM=pitter then awk will print the names to out.txt file
Pitter 23
Bob 75
In case PARAM=Josef then awk will print the names to out.txt file
Donald 54
Josef 85
Patrick 21
In case PARAM=Jennifer then awk will print the names to out.txt file
Tom 32
Jennifer 85
Svetlana 25
使用awk的RS
在这种情况下会很有帮助。请看下面的测试:
使用示例进行测试
kent$ cat file
# NAMES1
Pitter 23
Bob 75
# NAMES2
Donald 54
Josef 85
Patrick 21
# NAMES3
Tom 32
Jennifer 85
Svetlana 25
# NAMES4
kent$ awk -vPARAM="Pitter" 'BEGIN{RS="# NAMES."} {if($0~PARAM)print}' file
Pitter 23
Bob 75
kent$ awk -vPARAM="Josef" 'BEGIN{RS="# NAMES."} {if($0~PARAM)print}' file
Donald 54
Josef 85
Patrick 21
kent$ awk -vPARAM="Jennifer" 'BEGIN{RS="# NAMES."} {if($0~PARAM)print}' file
Tom 32
Jennifer 85
Svetlana 25
注意,输出中有一些空行,因为它们存在于您的输入中。然而,从输出中删除它们是很容易的。
如果#和NAMES之间有空格,可以尝试:
awk -vPARAM="Pitter" 'BEGIN{RS="# *NAMES."} {if($0~PARAM)print}' file