使用SED获取巨大文本文件的最后n行

use*_*676 8 linux text sed

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

小智 30

你没有.你用tail -n NUMLINES它.

tail -n 100 A.txt > B.txt
Run Code Online (Sandbox Code Playgroud)


dca*_*ell 10

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

sed -e :a -e '$q;N;11,$D;ba' 
Run Code Online (Sandbox Code Playgroud)

如果你计划在这些行上执行更多的sed命令,你应该只使用它.否则该tail命令是为此作业设计的.

  • 有人想解释这个命令中发生了什么吗? (5认同)
  • 我的电脑上没有尾巴,只有sed,awk和其他一些东西. (2认同)

par*_*eer 7

使用 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 行)。