如何从每个数据块中删除特定行?

时间:2015-06-29 16:44:35

标签: bash awk sed

我有重复的数据集,看起来像

700
block1
1  A  A  A
2  B  B  B
C  3  4  5 
D  6  8 10
....
FF DD 22 11 
700
block2
1  B  B  B
C  D  F  Q
....

该文件由100个数据块组成,每个数据块有702行。每个数据块的第一行是数据的数量(= 700),每个数据块的第二行是数据块的数量。

这里,我希望从每个数据块中删除第3~100行(这将删除98行),在每个数据块中只留下第101~第700行。在sed或grep中有没有办法做到这一点?我需要使用for循环吗?

我知道如何使用grep -v和sed删除具有特定模式的行,但是我找不到如何删除每个数据块中的多行。

2 个答案:

答案 0 :(得分:2)

试试这个:

awk '(NR % 702) < 3; (NR % 702) > 100' file > new_file

NR:总输入流中的当前记录号(行号)

%:模运算

答案 1 :(得分:2)

这可能适合你(GNU sed):

sed '/^700$/,+1p;//,+99d' file

打印所需的行并删除不需要的行。