2015-12-02 52 views
1

我有了一些規則圖案使用AWK在條件滿足時提取數據?

snaps1:   Counter:    4966 
    Opens:   Counter:   357283 
Instance:  s.1.aps.userDatabase.mount275668.attributes 

    snaps1:   Counter:    0 
    Opens:   Counter:   357283 
Instance:  s.1.aps.userDatabase.test.attributes 

這些線的上方和下方的其他線中重複一個大文件。我需要打印snaps1行並獲取實例:line所以我需要搜索snaps1,但只有計數器大於0,然後打印snaps1行和實例行。從本網站

有人給出了答案

awk '/snaps1/{s=$0; c=$NF} /Instance/ && c{print s ORS $0}' file 

這工作,但我不知道它是如何工作。我還需要知道這是否擺脫了空間?如果我想比較上面的文本而不是零,該怎麼辦?因此,不是查找零,而是查找snap1,它僅等於ZZZ,並且在比較snap1>零時,我想打印包含上面提供的實例的行。有人可以回覆,請提供詳細說明這是如何工作的,以便我可以在其他地方使用它?

snaps1:   Counter:    ZZZ 
    Opens:   Counter:   357283 
Instance:  s.1.aps.userDatabase.test.attributes 

    snaps1:   Counter:    ABC 
    Opens:   Counter:   357283 
Instance:  s.1.aps.userDatabase.test.attributes 
從線

所以上面我看到這個輸出

snaps1:   Counter:    ZZZ 
Instance:  s.1.aps.userDatabase.test.attributes 

感謝任何幫助,您可以提供

+0

'&& c'部分檢查計數器是否不是0.所以你可以使用'awk'/ snaps1/{s = $ 0; c = $ NF ==「ZZZ」}/Instance/&& c {打印s ORS $ 0}'文件' –

回答

0

您可以使用它像這樣:

awk '/snaps1/ && $NF=="ZZZ"{s=$0} /Instance/ && s{print s ORS $0; s=""}' file 
    snaps1:   Counter:    ZZZ 
Instance:  s.1.aps.userDatabase.test.attributes 

在awk命令明細:

/snaps1/ && $NF=="ZZZ" # if line has "snaps1" and last field is "ZZZ" 
{s=$0}     # store current line in variable s 
/Instance/ && s   # if line has "Instance" and variable s is not empty 
{print s ORS $0; s=""} # print variable s ORS and current line. Reset variable s 
+0

可以提供有關此命令如何工作的信息 – theuniverseisflat

+0

是檢查已更新的答案。 – anubhava

+0

非常感謝什麼是ORS – theuniverseisflat