簡體   English   中英

使用AWK在滿足條件時提取數據嗎?

[英]Using AWK To extract data when a condition is met?

我有一個帶有某些常規模式的大文件

   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,但是僅當counter大於0時,然后打印snaps1行和實例行。

該網站的某人提供了答案

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

這有效,但是我不確定它如何工作。 我還需要知道這是否擺脫了空間? 如果我想比較文本而不是上面的零,該怎么辦? 因此,除了尋找零以外,我將尋找的是snap1,它僅等於ZZZ,並且我想打印包含實例的行,作為上面比較snap1> 0時提供的答案。 有人可以答復,請提供有關其工作原理的詳細信息,以便我可以在其他地方使用它嗎?

   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

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

您可以像這樣使用它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM