我有一个大致类似的文件
header_one
param1
param2
...
data_one
data1
data2
data3
data4
...
header_two
param1
param2
...
data_two
data1
data2
data3
data4
我想提取所有header
带有N
以下行的块和所有data
带有M != N
以下行的块,保持它们在文件中出现的顺序并丢弃其他所有内容。
如果M == N == 8
我可以做
grep -A8 -E "header_|data_"
但是,如果我想为每种模式提供不同的上下文怎么办?
使用 awk 的临时解决方案可能是这样的:
n
在匹配的行上设置,并为每一行递减。n
当每个块后带有分隔符的正数时打印行。使用上述值,它将打印header_
行加上下一行,以及data_
行加上下两行。如果上下文块可以重叠,则新值
n
将覆盖先前的值。为了防止这种情况,添加条件来保护分配:这应该更好地处理连续行的
data_
情况header_
。我已尝试使用以下 sed 命令 经测试,它运行良好,让我知道任何混淆
输出