【问题标题】:How can I remove specific lines from each datablock?如何从每个数据块中删除特定行?
【发布时间】:2015-09-16 05:43:32
【问题描述】:

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

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 删除具有特定模式的行,但我找不到如何删除每个数据块内的多行。

【问题讨论】:

  • 第 701 行和第 702 行呢?你要不要保留“700”和“block1”?

标签: bash awk sed


【解决方案1】:

这可能对你有用(GNU sed):

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

打印需要的行,删除不需要的行。

【讨论】:

    【解决方案2】:

    试试这个:

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

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

    %: 模运算

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2011-10-30
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      相关资源
      最近更新 更多