Linux red-hat5.4 + awk манипулирование файлами - PullRequest
0 голосов
/ 27 ноября 2011

как сопоставить слово PARAM (param = name) в file.txt и вывести строки между

NAMEx и NAMEy, через awk, следующим образом:

если PARAM соответствует file.txt, то awk будет печатать только слова между близкими строками NAMES, в то время как PARAM является одним из имен

замечание1 ПАРАМ может быть любым именем, как Питтер, Боб и т.д .....

замечание2 awk получит PARAM = (любое имя)

замечание3 мы не знаем, сколько между нами пробелов (# до ИМЯ)

 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

1 Ответ

1 голос
/ 27 ноября 2011

с использованием RS из awk будет полезно в этом случае. см тест ниже:

тестирование на примере

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...