2011-11-27 49 views
-1

如何匹配PARAM(PARAM =名)字在file.txt的並打印Linux的紅hat5.4 + AWK文件操作

NAMEx和NAMEy之間的線路,通過AWK,如下面的方式:

如果param在file.txt的匹配,那麼awk將只打印關閉名稱的字符串的話,而param是名

備註1 PARAM可以是任何名稱爲去核,鮑勃,等一個....

remark2 awk將得到PARAM =(任意名稱)

備註3,我們不知道有多少空間有(#至NAME)用awk的RS會在這種情況下有用

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

之間。看到下面的測試:

與例如

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 

音符測試,有一些空行的輸出,因爲他們在您的輸入存在。但是很容易從輸出中刪除它們。

更新

,如果您有#和名之間的空間,你可以嘗試:

awk -vPARAM="Pitter" 'BEGIN{RS="# *NAMES."} {if($0~PARAM)print}' file 
+0

如何在#之間更新awk來的名字我有例如4個空格一個或多個空格或10個空格,如何忽略這個? (另請參閱我的更新問題) – david

+0

請參閱我的答案中的更新 – Kent