gpt4 book ai didi

linux - 查找字符串中三个字符序列的频率

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:26 25 4
gpt4 key购买 nike

我在查找字符串中的三个字母组时遇到了问题。我当前的代码是:

if [ -e  $1 ]
then
echo File Exists
grep -E -o -c \("[acgt][acgt][acgt]"\) $1
else
echo File doesnt Exist
fi

如何显示字符串中出现的次数?例如,我的字符串将包含

aacgtttgtaaccagaactgt
aac 3
tgt 2

等等

最佳答案

tail , fold , grep , sortuniq :

for i in {1..3}; do tail -c +"$i" infile; done | fold -w 3 | grep -Evx '.{,2}' |
sort | uniq -c | sort -nr

导致

      3 aac
2 tgt
1 ttt
1 ttg
1 taa
1 gtt
1 gta
1 gaa
1 ctg
1 cgt
1 cca
1 cag
1 aga
1 act
1 acg
1 acc

这是它的工作原理:

  • tail -c +"$i" infile打印 infile 的内容从与 $i 的值对应的偏移量开始, 所以for循环的输出是

    aacgtttgtaaccagaactgt
    acgtttgtaaccagaactgt
    cgtttgtaaccagaactgt

其余的中间输出显示在最后,阶段从左到右编号对应于编号的列表项:

  1. fold -w 3每行三个字符。
  2. grep -Evx '.{,2}'删除 ( -v ) 行,其中完整行 ( -x ) 匹配两个或更少字符 ( .{,2} )。 -E选项允许我们不转义花括号,但是 grep -vx '.\{,2\}'效果一样好。
  3. sort按字母顺序对输出进行排序(uniq 需要排序的输入)。
  4. uniq -c计算相同行的出现次数。
  5. sort -nr按出现次数降序排列。

     1.      2.      3.              4.              5.
    ---------------------------------------------------
    aac aac aac 3 aac 3 aac
    gtt gtt aac 1 acc 2 tgt
    tgt tgt aac 1 acg 1 ttt
    aac aac acc 1 act 1 ttg
    cag cag acg 1 aga 1 taa
    aac aac act 1 cag 1 gtt
    tgt tgt aga 1 cca 1 gta
    acg acg cag 1 cgt 1 gaa
    ttt ttt cca 1 ctg 1 ctg
    gta gta cgt 1 gaa 1 cgt
    acc acc ctg 1 gta 1 cca
    aga aga gaa 1 gtt 1 cag
    act act gta 1 taa 1 aga
    gt cgt gtt 2 tgt 1 act
    cgt ttg taa 1 ttg 1 acg
    ttg taa tgt 1 ttt 1 acc
    taa cca tgt
    cca gaa ttg
    gaa ctg ttt
    ctg
    t

关于linux - 查找字符串中三个字符序列的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46739658/

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