使用sed(或其他命令行程序)每隔X行删除一次

使用sed(或其他命令行程序)每隔X行删除一次,sed,terminal,command,line,Sed,Terminal,Command,Line,我有一个巨大的文本文件,在不同的时间对同一事物进行多次迭代,基本结构如下: Header (5 lines) Data (thousands of lines) Header (5 lines) Data (thousands of lines) Header (5 lines) Data (thousands of lines) 这会重复并持续一段时间 我想通过删除每一组头+数据来剔除这个文件。我想我应该使用sed,但我不知道如何使用 每个“周期”都以同一行开始可能会有所帮助(在本例中,假设

我有一个巨大的文本文件,在不同的时间对同一事物进行多次迭代,基本结构如下:

Header (5 lines)
Data (thousands of lines)
Header (5 lines)
Data (thousands of lines)
Header (5 lines)
Data (thousands of lines)
这会重复并持续一段时间

我想通过删除每一组头+数据来剔除这个文件。我想我应该使用
sed
,但我不知道如何使用

每个“周期”都以同一行开始可能会有所帮助(在本例中,假设它说的是
Program X output
),而该行只在每个“周期”的开始出现一次


谢谢

听起来你需要的只是:

awk '/Program X output/ && c++{exit} 1' file
e、 g


如果这还不是您所需要的全部,请编辑您的问题以澄清您的要求,并向我们展示简洁、可测试的示例输入和预期输出。

跟踪您看到关键字的频率,并且仅当此计数为奇数时才打印:

awk '/Program X output/ {n++} n%2 == 1' <<END
Program X output
a
b
c
Program X output
d
e
Program X output
f
g
h
i
j
Program X output
m
n
o
END
这可能适用于您(GNU-sed):


遇到标题行时,将1添加到保留空间(HS)中的计数器。如果计数器是所需数量的倍数,则将HS附加到每一行,并仅打印图案空间(PS)中的第一行。

非常感谢,这完全解决了问题。显然,我需要学习如何正确使用awk,我认为它只对专栏编辑有用。
awk '/Program X output/ {n++} n%2 == 1' <<END
Program X output
a
b
c
Program X output
d
e
Program X output
f
g
h
i
j
Program X output
m
n
o
END
Program X output
a
b
c
Program X output
f
g
h
i
j
sed -r '/Program X output/{x;s/^/x/;x};G;/\n(x{2})*$/!P;d' file