Linux red-hat5.4 + awk文件操作



如何匹配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 

最新更新