相关疑难解决方法(0)

使用-w(--word-regexp)标志为什么grep如此缓慢和内存密集?

我有一个文件中的id列表和一个数据文件(大小约为3.2Gb),我想提取数据文件中包含id和下一行的行.我做了以下事情:

grep -A1 -Ff file.ids file.data | grep -v "^-" > output.data
Run Code Online (Sandbox Code Playgroud)

这有效,但也提取了不需要的子串,例如,如果id EA4也被拉出线EA40.

所以我尝试使用相同的命令,但将-w(--word-regexp)标志添加到第一个grep以匹配整个单词.但是,我发现我的命令现在运行了> 1小时(而不是~26秒),并且还开始使用10千兆字节的内存,所以我不得不杀死这份工作.

为什么添加-w使命令如此缓慢和内存占用?如何有效地运行此命令以获得所需的输出?谢谢

file.ids 看起来像这样:

>EA4
>EA9
Run Code Online (Sandbox Code Playgroud)

file.data 看起来像这样:

>EA4 text
data
>E40 blah
more_data
>EA9 text_again
data_here
Run Code Online (Sandbox Code Playgroud)

output.data 看起来像这样:

>EA4 text
data
>EA9 text_again
data_here
Run Code Online (Sandbox Code Playgroud)

unix bash shell awk grep

6
推荐指数
1
解决办法
1369
查看次数

从fasta文件打印序列

我经常需要在fasta文件中找到一个特定的序列并打印出来.对于那些不知道的人,fasta是生物序列(DNA,蛋白质等)的文本文件格式.这很简单,你有一行序列名称后跟一个'>'然后跟随所有行,直到下一个'>'是序列本身.例如:

>sequence1
ACTGACTGACTGACTG
>sequence2
ACTGACTGACTGACTG
ACTGACTGACTGACTG
>sequence3
ACTGACTGACTGACTG
Run Code Online (Sandbox Code Playgroud)

我目前获得我需要的序列的方式是使用grep和-A,所以我会这样做

grep -A 10 sequence_name filename.fa
Run Code Online (Sandbox Code Playgroud)

如果我没有看到文件中下一个序列的开始,我会将10改为20并重复,直到我确定我得到了整个序列.

似乎应该有更好的方法来做到这一点.例如,我可以要求它打印到下一个'>'字符吗?

bash grep fasta

3
推荐指数
1
解决办法
3531
查看次数

如何使用awk进行多次匹配并在每个模式后打印不同数量的行

我有一个包含数千行的大文件,如下所示:

>ENST00001234.1
ACGTACGTACGG
TTACCCAGTACG
ATCGCATTCAGC
>ENST00002235.4
TTACGCAT
TAGGCCAG
>ENST00005546.9
TTTATCGC
TTAGGGTAT
Run Code Online (Sandbox Code Playgroud)

>例如,我想 grep 特定的 id(在符号之后),ENST00001234.1然后想在匹配之后获取行直到下一个>[不管行数]。我想以这种方式一次 grep 大约 63 个 ID。

如果我 grepENST00001234.1ENST00005546.9ids,理想的输出应该是:

>ENST00001234.1
ACGTACGTACGG
TTACCCAGTACG
ATCGCATTCAGC
>ENST00005546.9
TTTATCGC
TTAGGGTAT
Run Code Online (Sandbox Code Playgroud)

我试过了,awk '/ENST00001234.1/ENST00005546.9/{print}'但没有帮助。

bash awk grep bioinformatics fasta

1
推荐指数
1
解决办法
97
查看次数

标签 统计

bash ×3

grep ×3

awk ×2

fasta ×2

bioinformatics ×1

shell ×1

unix ×1