如何基于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
来计算总的行数。
然后,您可以将head
和tail
组合起来,以达到您想要的范围。 假设日志是4万行,你需要最后1562行,那么你需要第一个838行。所以:
tail -1562 MyHugeLogFile.log | head -838 | ....
或者有可能使用sed
或awk
更简单的方法。
这个怎么样:
$ 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.txt
: cat 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”的新文件中