【问题标题】:The simplest way to delete a section of text, n times删除一段文字的最简单方法,n次
【发布时间】:2013-02-20 11:43:53
【问题描述】:

我有一个大于 4gb 的文件,这对我来说是个坏消息,因为我无法在 notepad++ 中打开该文件并使用宏功能来记录和重复一个过程到文件末尾。 我想做的是,保留前 20 行文本,然后删除接下来的 80 行,然后重复该过程直到文件末尾。

最简单的方法是什么? 我正在Linux服务器上查看这些文件,因此运行某种脚本将是最简单的方法,或者也许有人知道在vi中执行此操作的方法? (因此是蹩脚的标签)

提前致谢

【问题讨论】:

    标签: bash shell vi


    【解决方案1】:

    awk 可以很容易地做到这一点:

    awk '(NR-1)%100 < 20' bigfile.txt
    

    【讨论】:

    • 为什么您首先提出 (NR-1)%100
    • @Kent 考虑第 100 行。我们想删除它,但 NR%100 &lt;= 20 会保留它。
    • 感谢您的快速发帖!我将如何保存所有内容以便将其打印到新文件中?
    • 在末尾添加一个shell重定向:awk '(NR-1)%100 &lt; 20' bigfile.txt &gt;shorter.txt
    【解决方案2】:

    我会选择 awk 解决方案,但这里有一种方法可以用 sed 做同样的事情:

    seq 20 | sed 's/$/~100p/' | sed -nf - bigfile.txt
    

    测试:

    seq 20 | sed 's/$/~100p/' | sed -nf - <(seq 200)
    

    输出:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    

    【讨论】:

    • 我没有测试,只是想知道,这行的输出顺序是什么?会是#1,#101,#201,#301....#2,#102,#202.... #20,#120,#220.. 吗?
    猜你喜欢
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 2010-11-20
    相关资源
    最近更新 更多