如何基于cygwin中的开始和结束行号裁剪(剪切)文本文件?

我有几个100MB左右的日志文件。 我个人觉得处理这样的大文件很麻烦。 我知道我感兴趣的日志行只有200到400行左右。

什么是从这些文件中提取相关日志行的好方法,即我只是想将行号的范围传递给另一个文件。

例如,input是:

filename: MyHugeLogFile.log Starting line number: 38438 Ending line number: 39276 

有一个命令,我可以在cygwin中运行,只在该文件中的范围内? 我知道,如果我能以某种方式显示在标准输出范围,那么我也可以pipe道输出文件。

注意:添加Linux标签以获得更多可见性,但是我需要一个可能在cygwin中工作的解决scheme。 (通常linux命令可以在cygwin中工作)。

听起来像sed的工作:

 sed -n '8,12p' yourfile 

…会将您的文件的第8行至第12行发送到标准输出。

如果你想在行号前加上,你可能希望首先使用cat -n

 cat -n yourfile | sed -n '8,12p' 

您可以使用wc -l来计算总的行数。

然后,您可以将headtail组合起来,以达到您想要的范围。 假设日志是4万行,你需要最后1562行,那么你需要第一个838行。所以:

 tail -1562 MyHugeLogFile.log | head -838 | .... 

或者有可能使用sedawk更简单的方法。

这个怎么样:

 $ seq 1 100000 | tail -n +10000 | head -n 10 10000 10001 10002 10003 10004 10005 10006 10007 10008 10009 

它使用tail从第10,000行开始输出,然后head只保留10行。

sed相同(几乎)的结果:

 $ seq 1 100000 | sed -n '10000,10010p' 10000 10001 10002 10003 10004 10005 10006 10007 10008 10009 10010 

这个可以让你直接input行范围。

当我试图在100000行的文件中分割一个文件时,我看到了这个线程。 比sed更好的解决scheme是:

 split -l 100000 database.sql database- 

它会给像这样的文件:

 database-aaa database-aab database-aac ... 

如果你只是想要剪切文件的一部分 – 比如26行到142行,并把它input到一个新cat file-to-cut.txt | sed -n '26,142p' >> new-file.txtcat file-to-cut.txt | sed -n '26,142p' >> new-file.txt cat file-to-cut.txt | sed -n '26,142p' >> new-file.txt

如果你只对最后的X行感兴趣,可以使用“tail”命令。

 $ tail -n XXXXX yourlogfile.log >> mycroppedfile.txt 

这会将日志文件的最后XXXXX行保存到一个名为“mycroppedfile.txt”的新文件中