【发布时间】:2020-03-29 11:15:51
【问题描述】:
我有一个具有以下结构的文件(见下文),我需要帮助来找到匹配每个“>集群”字符串的方法,并且对于每种情况,计算直到下一个“集群”之前的行数等等直到文件结束。
>Cluster 0
0 10565nt, >CL9602.Contig1_All... *
1 1331nt, >CL9602.Contig2_All... at -/98.05%
>Cluster 1
0 3798nt, >CL3196.Contig1_All... at +/97.63%
1 9084nt, >CL3196.Contig3_All... *
>Cluster 2
0 8710nt, >Unigene21841_All... *
>Cluster 3
0 8457nt, >Unigene10299_All... *
所需的输出应如下所示:
Cluster 0 2
Cluster 1 2
Cluster 2 1
Cluster 3 1
我尝试使用 awk 如下,但它只给了我行号。
awk '{print FNR "\t" $0}' All-Unigene_Clustered.fa.clstr | head - 20
==> standard input <==
1 >Cluster 0
2 0 10565nt, >CL9602.Contig1_All... *
3 1 1331nt, >CL9602.Contig2_All... at -/98.05%
4 >Cluster 1
5 0 3798nt, >CL3196.Contig1_All... at +/97.63%
6 1 9084nt, >CL3196.Contig3_All... *
7 >Cluster 2
8 0 8710nt, >Unigene21841_All... *
9 >Cluster 3
10 0 8457nt, >Unigene10299_All... *
我也尝试过使用 sed,但它只打印行,甚至省略了一些行。
sed -n -e '/>Cluster/,/>Cluster/ p' All-Unigene_Clustered.fa.clstr | head
>Cluster 0
0 10565nt, >CL9602.Contig1_All... *
1 1331nt, >CL9602.Contig2_All... at -/98.05%
>Cluster 1
>Cluster 2
0 8710nt, >Unigene21841_All... *
>Cluster 3
>Cluster 4
0 1518nt, >CL2313.Contig1_All... at -/95.13%
1 8323nt, >CL2313.Contig8_All... *
此外,我尝试将 awk 和 sed 与 'wc' 结合使用,但它只为我提供了字符串匹配的总发生次数。
我想用 grep 的 -v 选项减去不匹配字符串 '>cluster' 的行,然后减去匹配字符串 '>Cluster' 的每一行,然后将两者都添加到一个新文件中,例如
grep -vw '>Cluster' All-Unigene_Clustered.fa.clstr | head
0 10565nt, >CL9602.Contig1_All... *
1 1331nt, >CL9602.Contig2_All... at -/98.05%
0 3798nt, >CL3196.Contig1_All... at +/97.63%
1 9084nt, >CL3196.Contig3_All... *
0 8710nt, >Unigene21841_All... *
0 8457nt, >Unigene10299_All... *
0 1518nt, >CL2313.Contig1_All... at -/95.13%
grep -w '>Cluster' All-Unigene_Clustered.fa.clstr | head
>Cluster 0
>Cluster 1
>Cluster 2
>Cluster 3
>Cluster 4
但问题是每个 '>Cluster' 后面的行数不是恒定的,每个 '>Cluster' 字符串后面跟着 1、2、3 或更多行,直到下一个字符串出现。
在之前回答的问题中广泛搜索帮助后,我决定发布我的问题,但我找不到任何有用的答案。
谢谢
【问题讨论】:
-
因此,我们确实鼓励人们为解决自己的问题付出努力,所以请在您的问题中添加相同的内容,然后让我们知道。(我不知道顺便说一句)