相关疑难解决方法(0)

从大文件中提取大量模式

我有一个每天增长大约 200,000 行的文件,它都是由三行块组成的:

1358726575123       # key
    Joseph Muller   # name
    carpenter       # job
9973834728345
    Andres Smith
    student
7836472098652
    Mariah Anthony
    dentist
Run Code Online (Sandbox Code Playgroud)

现在,我有另一个文件,我从中提取了大约 10,000 个关键模式,例如1358726575123. 然后我for用这些模式运行一个循环,并且必须根据第一个文件检查它们。如果文件不包含此类模式,我会将模式保存在第三个文件中以供进一步处理:

for number in $(grep -o '[0-9]\{12\}' file2); do  # finds about 10.000 keys
     if ! grep -q ^$number$ file1; then           # file1 is a huge file
         printf "$number\n" >>file3               # we'll process file3 later
     fi
done
Run Code Online (Sandbox Code Playgroud)

示例代码 grep 一个巨大的文件 10,000 次,我在一整天内大约每分钟运行一次这个循环。

由于巨大的文件不断增长,我该怎么做才能使这一切更快并节省一些 CPU?我想知道以某种方式通过其键(如果是,如何?)或使用 db 而不是纯文本对文件进行排序会有所帮助...

grep awk database text

19
推荐指数
3
解决办法
3万
查看次数

标签 统计

awk ×1

database ×1

grep ×1

text ×1