查找在同一行上出现多次模式的文件

问题描述 投票:0回答:1

我有一个fasta格式的文件,如下例所示。我想从序列中提取文件的条目:“ CGTACG”出现多次。

>seq1
AAATTCCGTACGGGCCTCT
>seq2
TGGAATCACAGCGGCGTACGCAGCGGCGGCTGCGGCCGTACGGCG
>seq3
AATGCCAAACGTACGAACAT

在此示例中,输出为(因为序列'CGTACG'发生两次):

>seq2
TGGAATCACAGCGGCGTACGCAGCGGCGGCTGCGGCCGTACGGCG
unix fasta
1个回答
2
投票

您可以为此使用awk

for file in *; do
    [[ -f "$file" ]] || continue # skip if not a regular file
    if ! awk -v seq=CGTACG '$0 ~ seq".*"seq {exit(1)}' "$file"; then
        # the file has two or more occurrences of the string on the same line, process it
        # more code
    fi
done

awk在每个文件中查找字符串,并在找到具有两次或多次出现该字符串的行时立即退出1。 if !测试可确保仅在awk的退出代码为1时才拾取文件。

如果我们在不同行中查找多个匹配项,则:

for file in *; do
    [[ -f "$file" ]] || continue # skip if not a regular file
    if ! awk -v seq=CGTACG '$0 ~ seq {x++; if(x>1) exit(1)}' "$file"; then
        # the file has two or more occurrences of the string on different lines, process it
        # more code
    fi
done

0
投票

这是问题的扩展:how can I count the frequency of letters

awk -v subseq="CGTACG" '
     />/ && gsub(subseq,subseq,seq) > 1 { print name; print seq }
     />/{name=$0;seq="";next}
     {seq=seq $0}
     END { if(gsub(subseq,subseq,seq) > 1) { print name; print seq } }
    ' file.fasta

此方法将所有多行序列合并为一行,并检查subseq是否出现多于一个。它使用gsub函数执行此操作:

gsub(ere, repl[, in])行为与sub(请参阅下文)类似,不同之处在于它应替换$0in自变量中指定的所有出现的正则表达式(如ed实用程序全局替换)。

sub(ere, repl[, in ])将字符串repl替换为扩展正则表达式ERE的第一个实例,替换为并返回替换数目中的字符串。 如果省略in,awk将使用当前记录($0)代替。

来源:Awk Posix Standard] >>

但是,可以稍微清理一下:

awk -v subseq="CGTACG" '
     function count_subseq(seq,subseq,   t) {
         t=seq;gsub(RS,RS,t)
         return gsub(subseq,subseq,t)
     }
     />/ && count_subseq(seq,subseq) > 1 { print name; print seq }
     />/{name=$0;seq="";next}
     {seq=seq RS $0}
     END { if(count_subseq(seq,subseq) > 1) { print name; print seq } }
    ' file.fasta

同样地,使用bioawk,您可以执行

bioawk -c fastx -v subseq="CGTACG" '(gsub(subseq,subseq,seq)>1){print ">"$name; print $seq}' file.fasta

注:

BioAwk基于Brian Kernighan's awk中记录的"The AWK Programming Language", by Al Aho, Brian Kernighan, and Peter Weinberger (Addison-Wesley, 1988, ISBN 0-201-07981-X) 。我不确定此版本是否与POSIX兼容。

0
投票

您需要的是:

© www.soinside.com 2019 - 2024. All rights reserved.