【问题标题】:Using SED to Get the Last n Lines of a Huge Text File使用 SED 获取大文本文件的最后 n 行
【发布时间】:2013-08-29 11:39:41
【问题描述】:

我如何使用“sed”命令获取一个大文本文件(例如 A.txt)的最后 n 行并将它们复制到一个新的文本文件(例如 B.txt)中?我不想从 A.txt 中删除那几行。

【问题讨论】:

  • 不是tail -n 42 完美匹配(对于n==42)?
  • @sehe 我就是这么说的...(想用sed 来解析一些HTML 吗?)

标签: linux text sed


【解决方案1】:

使用 GNU sed,获取最后 10 行的方法如下:

(对于 n 行,将 11 替换为 n+1)

sed -ne':a;$p;N;11,$D;ba' A.txt > B.txt

注意:在我的 Mac 上,使用 MacPorts,GNU sed 被调用为 gsed。要使用 Apple 的 sed,您必须将标签分开:sed -ne':a' -e'$p;N;11,$D;ba'*

说明:

sed -ne'在没有自动打印模式空间的情况下调用sed

:a 循环标签

$p 在最后一行,打印模式空间,然后退出

N 啜饮下一行

11,$D 从第 11 行到最后一行,从模式空间中删除第一行(即 [^\n]*\n)

ba' 循环到:a

进一步

由于循环,sed 不断地将下一行附加到模式空间。从第 11 行到最后一行 (11,$D) sed 开始从模式空间中删除第一行。在最后一行打印模式空间(`$p'),其中包含最近 10 行(文件 A.txt 的最后 10 行)。

【讨论】:

    【解决方案2】:

    以下是如何使用 sed 打印文件的最后 10 行:

    sed -e :a -e '$q;N;11,$D;ba' 
    

    如果您打算在这些行上执行更多 sed 命令,您应该只使用它。否则,tail 命令就是为此作业设计的。

    【讨论】:

    • 不确定是否令人印象深刻或无礼:)
    • 我的电脑上没有tail,只有sed、awk等一些。
    【解决方案3】:

    你没有。为此,您使用tail -n NUMLINES

    tail -n 100 A.txt > B.txt
    

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 2015-09-07
      • 2010-09-28
      • 2021-12-06
      • 2017-01-21
      • 1970-01-01
      相关资源
      最近更新 更多