大(27GB)文件的grep功能更快
发布时间:2021-01-11 16:34:29 所属栏目:Linux 来源:互联网
导读:我必须从一个大文件(27GB)的文件(5MB)grep包含特定的字符串相同的字符串(和其他信息). 为了加快分析,我将27GB文件分解成1GB文件,然后应用以下脚本(在这里的一些人的帮助下).但是它不是很有效(生成一个180KB的文件需要30个小时!). 这是脚本.有没有比grep更合
|
我必须从一个大文件(27GB)的文件(5MB)grep包含特定的字符串相同的字符串(和其他信息).
这是脚本.有没有比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)使用LC_ALL = C将您的grep命令前缀使用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是为了帮助您并行运行作业而设计的. (编辑:东莞站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 使用quadmath的G 4.6.3 Linux中的四倍精度
- linux – 无法附加到运行Docker容器的bash
- x86 – Linux / SMP自旋锁不必要地慢吗?
- 使用Postman工具/ cURL /在Chrome控制台中测试CO
- 有没有办法确定Linux上的库使用的线程本地存储模
- linux – Bash“declare -A”在macOS上不起作用
- linux – 获取自上次修改文件以来的天数
- LINUX教学:sudo 出现unable to resolve host 解决
- linux – 如果有两个矩阵a和b,那么(b)在matlab中
- linux – 如何在bash上使用filetype将文件排序到
热点阅读
