我有一個fasta file_imagine作爲txt文件,其中偶數行是字符序列,奇數行是序列id's_我想要搜索串中的字符串並獲取匹配子字符串以及它們的ID的位置。示例: 輸入:bash-搜索文件中的字符串並返回所有匹配的位置
>111
AACCTTGG
>222
CTTCCAACC
>333
AATCG
搜索「CC」。輸出:
3 111
4 8 222
我有一個fasta file_imagine作爲txt文件,其中偶數行是字符序列,奇數行是序列id's_我想要搜索串中的字符串並獲取匹配子字符串以及它們的ID的位置。示例: 輸入:bash-搜索文件中的字符串並返回所有匹配的位置
>111
AACCTTGG
>222
CTTCCAACC
>333
AATCG
搜索「CC」。輸出:
3 111
4 8 222
$ awk -F'CC' 'NR%2==1{id=substr($0,2);next} NF>1{x=1+length($1); b=x; for (i=2;i<NF;i++){x+=length(FS $i); b=b " " x}; print b,id}' file
3 111
4 8 222
說明:
-F'CC'
AWK場所輸入線到字段。我們指示它在本例中使用感興趣的序列CC
作爲字段分隔符。
NR%2==1{id=substr($0,2);next}
在奇數行中,我們將ID變量id
。假設是第一個字符是>
,而id是什麼後面的。捕獲了id後,我們指示awk跳過剩餘的命令並從next
行開始。
NF>1{x=1+length($1); b=x; for (i=2;i<NF;i++){x+=length(FS $i); b=b " " x}; print b,id}
如果AWK發現上的輸入線只有一個字段,NF==1
,這意味着,有沒有發現字段分隔符,我們忽略這些行。
對於其餘的行,我們計算每個匹配的位置x
,然後保存在字符串b
中找到的每個值x
。
最後,我們打印匹配位置b
和id
。
將打印行號和每個匹配的每個開始位置。
awk 'NR%2==1{t=substr($0,2)}{z=a="";while(y=match($0,"CC")){a=a?a" "z+y:z+y;$0=substr($0,z=(y+RLENGTH));z-=1}}a{print a,t }' file
整潔
awk '
NR%2==1{t=substr($0,2)}
{
z=a=""
while (y = match($0,"CC")) {
a=a?a" "z+y:z+y
$0=substr($0,z=(y+RLENGTH))
z-=1
}
}
a { print a,t }' file
。
3 111
4 8 222