如何在一行中没有空格的情况下为多个字符串编写脚本:
acgtttgggcccagctctccgccctcacacacaccccggggt
出于视觉目的:
acg ttt ggg ccc agc tct ccg ccc tca cac aca ccc cgg ggt
,并且必须将第4个3个字母的序列匹配两次。因此,在上述序列中,我们将ccc作为第四个序列。并在agc tct ccg之后再次重复。
所以我必须使用grep吗?
答案 0 :(得分:1)
那又如何:
#!/bin/bash
# add a space every three letters
str="acgtttgggcccagctctccgccctcacacacaccccggggt"
result=$(sed -e 's/\(...\)/\1 /g' <<< "$str")
echo $result
# check if the 4th sequence is repeated two times
awk '
{ ref = $4; # set the 4th sequence as a reference
for (i=5; i<=NF; i++) # iterate from 5th sequence to the end
if (ref == $i) count++ # count the same one as the reference
printf "4th sequence \"%s\" repeated %d times.\n", ref, count
}' <<< "$result"
产生:
acg ttt ggg ccc agc tct ccg ccc tca cac aca ccc cgg ggt
4th sequence "ccc" repeated 2 times.
该脚本由两部分组成:第一部分用空格分割字符串,第二部分计算第四个三元组的重复次数。
sed
脚本sed -e 's/\(...\)/\1 /g'
每隔三个字母插入一个空格。awk
脚本遍历与第四个三元组相同的序列。count
与2进行比较。希望这会有所帮助。