V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wuxiao2522
V2EX  ›  问与答

有个 23GB 的 TXT,想搜索里面某特定字符,有什么快速办法?

  •  
  •   wuxiao2522 · 2015-12-07 12:32:13 +08:00 · 3792 次点击
    这是一个创建于 3268 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个 23GB 的 TXT ,想搜索里面某特定字符,有什么快速办法?
    30 条回复    2015-12-09 00:28:25 +08:00
    pupboss
        1
    pupboss  
       2015-12-07 12:35:12 +08:00   ❤️ 1
    全部放到内存
    lsmgeb89
        2
    lsmgeb89  
       2015-12-07 12:39:19 +08:00   ❤️ 1
    grep 下?感觉有 UI 的编辑器 hold 不住哈
    lshero
        3
    lshero  
       2015-12-07 12:42:22 +08:00   ❤️ 1
    如果是一行一行的日志的话 切割成多份 一份一份的找
    tracyone
        4
    tracyone  
       2015-12-07 12:43:56 +08:00 via Android   ❤️ 1
    grep ack ag perl …
    hahasong
        5
    hahasong  
       2015-12-07 12:46:53 +08:00   ❤️ 1
    用 java 一行一行的读,写个循环
    kokutou
        6
    kokutou  
       2015-12-07 12:48:33 +08:00   ❤️ 1
    winhex ...
    wuxiao2522
        7
    wuxiao2522  
    OP
       2015-12-07 12:49:54 +08:00
    @pupboss 没这么大内存的机器
    @lsmgeb89 正准备这么做,找到这行数据后,有没有办法把这行数据的前后几百行一共拷贝出来呢?
    @lshero 办法可行,有点麻烦。
    @tracyone Linux 小白,参数具体意义?
    @hahasong 不会 Java 。
    Slienc7
        8
    Slienc7  
       2015-12-07 13:13:19 +08:00   ❤️ 1
    随便什么语言 ReadLine
    tracyone
        9
    tracyone  
       2015-12-07 13:26:25 +08:00 via Android   ❤️ 1
    @wuxiao2522 前三个是命令行程序,后面一个是脚本语言,都是用于文本查找的,特点和快慢有所不同,自己搜索下关键字和正则表达式
    bk201
        10
    bk201  
       2015-12-07 13:27:03 +08:00   ❤️ 1
    readline 只适合有换行符的吧,而且换行符的哪一行还得小。
    按字节读取或者分割。
    wuxiao2522
        11
    wuxiao2522  
    OP
       2015-12-07 13:32:13 +08:00
    @kokutou 感谢,已经 winhex 搞定。
    @tracyone 谢谢,已经解决了。
    kxjhlele
        12
    kxjhlele  
       2015-12-07 13:35:23 +08:00
    sep 也可以把,
    skydiver
        13
    skydiver  
       2015-12-07 13:39:30 +08:00
    前后两百行: grep -C 200 <strtofind> <filename>
    dzxx36gyy
        14
    dzxx36gyy  
       2015-12-07 13:44:41 +08:00 via Android
    曾经我也纠结过怎么打开 23g 的某社工库 txt ……
    abelyao
        15
    abelyao  
       2015-12-07 13:53:42 +08:00 via iPhone
    @dzxx36gyy 哪个库啊?
    ryd994
        16
    ryd994  
       2015-12-07 14:00:35 +08:00 via Android
    read(n)不就好了么?
    多少 G 都行啊
    dzxx36gyy
        17
    dzxx36gyy  
       2015-12-07 14:14:16 +08:00 via Android
    @abelyao soyun
    lululau
        18
    lululau  
       2015-12-07 14:25:14 +08:00
    如果你能估计要检索出的结果在文件中的偏移量,或者文件是有序的,可以用二分查找之类的:

    # 显示一个文件中从第 50G 个字节开始的长度为 1K 字节的内容
    offset=$((50*1024*1024*1024-1))
    length=1024
    dd if=file_name bs=1 skip="$offset" count="$length" | grep regex

    如果不是这个情况,那就搞不懂这个问题到底是啥意思了
    xujif
        19
    xujif  
       2015-12-07 14:31:44 +08:00
    grep --help 就可以满足了
    ixiaozhi
        20
    ixiaozhi  
       2015-12-07 14:53:06 +08:00
    23GB 的社工库么。。。
    wuxiao2522
        21
    wuxiao2522  
    OP
       2015-12-07 15:06:39 +08:00
    @ixiaozhi 类似吧,是一本字典。
    qinxi
        22
    qinxi  
       2015-12-07 17:02:07 +08:00
    如果只搜一次 那就随便 readline 如果想重复搜索 你用类似 lucene 的工具吧 不过嘛 索引会很大很大..哈哈哈哈
    jasontse
        23
    jasontse  
       2015-12-07 17:04:43 +08:00 via iPad
    squid157
        24
    squid157  
       2015-12-07 17:30:42 +08:00
    读文件才是最慢的吧

    想想弄到数据库里面然后对有意义的字段加个索引多好
    fxxkgw
        25
    fxxkgw  
       2015-12-07 18:10:58 +08:00
    grep 最快 也可以用 es
    leavic
        26
    leavic  
       2015-12-07 18:21:27 +08:00
    你该问问写这个 txt 文件的人
    matrix67
        27
    matrix67  
       2015-12-07 18:25:39 +08:00 via Android
    ag 啊
    xdeng
        28
    xdeng  
       2015-12-07 18:48:58 +08:00
    UE
    omen
        29
    omen  
       2015-12-08 13:14:37 +08:00
    用 everedit 打开就可以搜索
    webjin
        30
    webjin  
       2015-12-09 00:28:25 +08:00
    @wuxiao2522 你好,怎么搞定的,有操作教程吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2738 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 08:44 · PVG 16:44 · LAX 00:44 · JFK 03:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.