[英]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.