使用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