我想解决以下问题,到目前为止,我认为 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
如您所见,每个 Detail 都属于最近的标题。每个标题的详细信息数量是可变的 应忽略空标题。
我尝试了各种正则表达式和 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}
对于所有其他行,打印 header
<hdr
的最新值,后跟一个冒号,然后是行 ($0
)。
关于regex - awk - 如果下一行与模式不匹配则删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25758728/