簡體   English   中英

awk - 如果下一行與模式不匹配,則刪除行

[英]awk - delete line if next lines don't match pattern

我想解決以下問題,到目前為止我認為awk也可能是正確的,但如果我錯了就證明我。

我有一個遵循這個方案的控制台輸出:

HEADER: HeaderInfo1
Details 1
Details 2
HEADER: HeaderInfo2
HEADER: HeaderInfo3
Details 3
Details 4
HEADER: HeaderInfo4

我想將其轉換為以下內容:

HeaderInfo1: Details 1
HeaderInfo1: Details 2
HeaderInfo3: Details 3
HeaderInfo3: Details 4

如您所見,每個詳細信息都屬於最近的標題。 每個標題的詳細信息數量是可變的空標題應該被忽略。

我嘗試了各種正則表達式和sed魔法,但這似乎就像我認為的awk一樣。 但是我不知道從哪里開始。

假設您的信息位於名為info的文件中:

$ awk '/^HEADER/{hdr=$2;next} {print hdr": "$0}' info
HeaderInfo1: Details 1
HeaderInfo1: Details 2
HeaderInfo3: Details 3
HeaderInfo3: Details 4

說明

awk程序分為兩部分:

  • /^HEADER/{hdr=$2;next}

    對於以HEADER開頭的行,第二個字段保存在變量hdr ,然后指示awk跳到下一行。

  • {print hdr": "$0}

    對於所有其他行,將打印標題hdr最新值,后跟冒號,后跟行( $0 )。

暫無
暫無

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

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