gpt4 book ai didi

file - 大 (27GB) 文件的更快 grep 功能

转载 作者:行者123 更新时间:2023-11-29 08:52:38 24 4
gpt4 key购买 nike

我必须从一个包含特定字符串的文件 (5MB) 中 grep 一个大文件 (27GB) 中的相同字符串(和其他信息)。为了加快分析速度,我将 27GB 的文件拆分为 1GB 的文件,然后应用了以下脚本(在此处一些人的帮助下)。然而它不是很有效(生成一个 180KB 的文件需要 30 个小时!)。

这是脚本。有没有比 grep 更合适的工具?还是使用 grep 的更有效方式?

#!/bin/bash

NR_CPUS=4
count=0


for z in `echo {a..z}` ;
do
for x in `echo {a..z}` ;
do
for y in `echo {a..z}` ;
do
for ids in $(cat input.sam|awk '{print $1}');
do
grep $ids sample_"$z""$x""$y"|awk '{print $1" "$10" "$11}' >> output.txt &
let count+=1
[[ $((count%NR_CPUS)) -eq 0 ]] && wait
done
done #&

最佳答案

一些你可以尝试的事情:

1) 您正在多次阅读 input.sam。它只需要在你的第一个循环开始之前被阅读一​​次。将 ID 保存到一个临时文件中,该文件将由 grep 读取。

2) 在您的 grep 命令前加上 LC_ALL=C 以使用 C 语言环境而不是 UTF-8。这将加快 grep 的速度。

3) 使用 fgrep 因为您要搜索的是固定字符串,而不是正则表达式。

4) 使用 -f 使 grep 从文件中读取模式,而不是使用循环。

5) 不要从多个进程写入输出文件,因为您最终可能会遇到行交错和损坏的文件。

进行这些更改后,这就是您的脚本的样子:

awk '{print $1}' input.sam > idsFile.txt
for z in {a..z}
do
for x in {a..z}
do
for y in {a..z}
do
LC_ALL=C fgrep -f idsFile.txt sample_"$z""$x""$y" | awk '{print $1,$10,$11}'
done >> output.txt

另外,查看 GNU Parallel旨在帮助您并行运行作业。

关于file - 大 (27GB) 文件的更快 grep 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14602963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com