【问题标题】:seek to a line in a file and display it on linux寻找文件中的一行并在linux上显示
【发布时间】:2011-12-07 08:44:42
【问题描述】:

如何在不打开文件的情况下查找一行并将其显示在 linux 上的文件中?有什么有用的命令吗?文件比较大,内存打不开。

【问题讨论】:

  • 添加更多细节,任何编程语言?什么壳? “不打开文件”是什么意思? stackoverflow.com/questions/1429556/…
  • 整个文件没有理由必须驻留在内存中才能搜索。通常一次只读取小块,直到满足搜索或达到 eof。打开文件几乎没有商量余地。
  • 如果你希望在不打开文件的情况下获得内容,我当然希望你对超级块很友好。
  • “行”由“行分隔符”字符的位置定义(在 UN*X:CR,又名\n),它可以以任何频率出现在文件中的任何位置。除非您的特定文件具有比这更严格的结构(例如,所有行具有相同数量的字符),否则为了使第 N 行的位置可以以某种方式预测,则无法提前确定文件中的位置“行 N" 开始时不会读取整个文件到该点并计算行分隔符。这样做时,您不需要将整个文件保留在内存中 - 丢弃已处理的部分。

标签: linux


【解决方案1】:

您的文件系统上是否有足够的空间来拆分文件? If so, try this:

$ split -b 1024m <filename>  

这会将您的文件分成所需的多个部分,大小为 1024MB 块,通常名称以 xaa、xab、xac 等开头。

cat xa* | grep yourpattern

当你完成后:

rm xa*

【讨论】:

  • 我猜 grep -rn 'searchpattern' 也会做同样的事情
【解决方案2】:

http://sed.sourceforge.net/sed1line.txt 显示了从文件中显示单行的示例。它必须打开文件才能读取它,但应该通过内容流式传输而不将整个内容加载到内存中。

sed '52q;d' # method 3, efficient on large files

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    相关资源
    最近更新 更多