我有一个 4.6GB 的文本文件需要搜索。
令人惊讶的是,grep 相当快,但我需要能够在搜索特定文本后滚动文件。
通常我选择的工具是 Less,但是对于这个来说它慢得像糖蜜。
哪种分页器和/或编辑器最适合处理 4.6GB 的文件?我的笔记本电脑总共有 16 GB 的 RAM,因此需要对 RAM 使用效率有所提高。
答案1
对于 1.5GB 的文件,vim 对我来说很管用。在我的笔记本电脑上,对不存在的字符串(即整个文件)进行文本搜索大约需要 10-15 秒。但请注意,vim 会将文件完全加载到内存中。对于拥有 16GB RAM 的你来说,这可能不是问题。
但我有这个~/.vimrc
(遗憾的是不记得原始出处):
" changes to open really big files
let g:LargeFile = 1024 * 1024 * 10
augroup LargeFile
autocmd BufReadPre * let f=getfsize(expand("<afile>")) | if f > g:LargeFile || f == -2 | call LargeFile() | endif
augroup END
function LargeFile()
" no syntax highlighting etc
set eventignore+=FileType
" save memory when other file is viewed
setlocal bufhidden=unload
" is read-only (write with :w new_filename)
setlocal buftype=nowrite
" no undo possible
setlocal undolevels=-1
" display message
autocmd VimEnter * echo "The file is larger than " . (g:LargeFile / 1024 / 1024) . " MB, so some options are changed (see .vimrc for details)."
endfunction
您可能还会对以下内容感兴趣另一个 SE 网站上有类似问题,因为可能还有更多技巧。例如,我看到有人建议使用专门用于大文件的 vim 插件 — 从未尝试过这个。
答案2
令人惊讶的是,grep 相当快,但我需要能够在搜索特定文本后滚动文件。
也许使用grep
选项来显示找到的条目的上下文?
Context control:
-B, --before-context=NUM print NUM lines of leading context
-A, --after-context=NUM print NUM lines of trailing context
-C, --context=NUM print NUM lines of output context