我想解决以下问题,到目前为止我认为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一样。但是,我不知道从哪里开始。
答案 0 :(得分:4)
假设您的信息位于名为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
)。