bit*_*its 57 linux command-line cygwin
我有几个约100MB的日志文件.我个人认为处理这些大文件很麻烦.我知道我感兴趣的日志行只有200到400行左右.
从这些文件中提取相关日志行的好方法是什么,即我只想将行号范围传递给另一个文件.
例如,输入是:
filename: MyHugeLogFile.log
Starting line number: 38438
Ending line number: 39276
Run Code Online (Sandbox Code Playgroud)
是否有一个命令,我可以在cygwin中运行cat
只能在该文件中的那个范围?我知道如果我能以某种方式在stdout中显示该范围,那么我也可以管道输出文件.
注意:添加Linux
标记以提高可见性,但我需要一个可能在cygwin中运行的解决方案.(通常linux命令在cygwin中有效).
Joh*_*web 111
听起来像是一份工作sed
:
sed -n '8,12p' yourfile
Run Code Online (Sandbox Code Playgroud)
...将第8到第12行发送yourfile
到标准输出.
如果您想要添加行号,您可能希望先使用cat -n
:
cat -n yourfile | sed -n '8,12p'
Run Code Online (Sandbox Code Playgroud)
Dav*_*vid 11
您可以用来wc -l
计算总行数.
然后head
,您可以组合并tail
获得所需的范围.让我们假设日志是40,000行,你想要最后的1562行,然后是你想要的第一行838行.所以:
tail -1562 MyHugeLogFile.log | head -838 | ....
Run Code Online (Sandbox Code Playgroud)
或者使用sed
或更简单的方法awk
.
当我试图在一个包含10万行的文件中分割文件时,我看到了这个帖子.比sed更好的解决方案是:
split -l 100000 database.sql database-
Run Code Online (Sandbox Code Playgroud)
它将提供如下文件:
database-aaa
database-aab
database-aac
...
Run Code Online (Sandbox Code Playgroud)
如果您只想剪切文件的一部分 - 比如从第26行到第142行 - 并将其输入到新文件中:
cat file-to-cut.txt | sed -n '26,142p' >> new-file.txt
这个怎么样:
$ seq 1 100000 | tail -n +10000 | head -n 10
10000
10001
10002
10003
10004
10005
10006
10007
10008
10009
Run Code Online (Sandbox Code Playgroud)
它用于tail
从第 10,000 行开始输出,然后head
只保留 10 行。
相同(几乎)的结果sed
:
$ seq 1 100000 | sed -n '10000,10010p'
10000
10001
10002
10003
10004
10005
10006
10007
10008
10009
10010
Run Code Online (Sandbox Code Playgroud)
这样做的好处是可以直接输入行范围。
归档时间: |
|
查看次数: |
100850 次 |
最近记录: |