簡體   English   中英

grep一行然后打印awk直到某個子串

[英]Grep a line then print awk until a certain substring

我的代碼是

var=$(cat $FILE | grep "$alineimlookingfor" | awk '{print $1, $2, $4, $7, $9... all the way to $20}'
echo "$var" 

但是,我希望在達到(0)或(1)之類的值時停止$ 9- $ 20。 這將使我的輸出格式看起來更好,因為(0)或(1)之后的任何東西都是垃圾。

有沒有人對實現它的方法有所了解?

輸入:

2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (0) - 21-JUNE-10    

輸出:

2013-02-21 00:12:03,374 IN ProcedureTask - Finished Sales Summary 22 This (0)

編輯:感謝所有對這條線特別注意的人和特別感謝

更新:

awk -v pattern="$alineimlookingfor" '
    $0 ~ pattern {
        rec = $1 OFS $2 OFS $4 OFS $7
        for (i=9; i<=NF; i++) {
            rec = rec OFS $i
            if ($i ~ /\([01]\)/) {
                break
            }
        }
        print rec
    }
' "$FILE"

應該完全符合您的要求

筆記:

  • NF是含F ields的N-棕土在當前記錄的AWK變量。
  • 當我們看到包含模式的記錄時:
    • 存儲在一個變量稱為第一4個字段rec ,由頻˚Field 小號 eparator分離。
    • 循環遍歷從9到最后的字段,附加到rec變量
      • 當我們看到一個匹配正則表達式(括號中的零或一個)時,我們就會跳出for循環
    • 並打印累積的rec字符串。

首先,請注意awk可以執行catgrep所做的事情,因此我們可以立即簡化管道

awk -v pattern="$alineimlookingfor" '$0 ~ pattern {print $1, $2, $4, $7, $9... all the way to $20}' "$FILE"

接下來,聽起來你想要

awk -v pattern="$alineimlookingfor" '
    $0 ~ pattern {
        for (i=9; i<NF; i++) {
            if ($i == "(0)" || $i == "(1)") {
                NF = i
                break
            }
        }
        print
    }
' "$FILE"

這會更改“此記錄中的字段數”變量,以便忽略后續字段。

測試

alineimlookingfor=ProcedureTask
awk -v pattern="$alineimlookingfor" '
    $0 ~ pattern {
        for (i=9; i<NF; i++) {
            if ($i == "(0)" || $i == "(1)") {
                NF = i
                break
            }
        }
        print
    }
' <<'END'
foo
2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (0) - 21-JUNE-10    
bar
2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (1) - 21-JUNE-10    
baz
2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (2) - 21-JUNE-10    
END

輸出

2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (0)
2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (1)
2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (2) - 21-JUNE-10    

暫無
暫無

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

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