for loop for multiple files:将两个具有相似ID的fasta文件合并为一个文件

for loop for multiple files: combine two fasta files with similar ID to one file

我在一个目录中有 100 多个 fasta 文件:

A_n.fasta
A_t.fasta
B_n.fasta
B_t.fasta
C_n.fasta
C_t.fasta 
...

Fasta 文件包含不同数量的序列,我需要为每一对将它们放在一起:

input A_n.fasta, A_t.fasta output A_nt.fasta ....

我正在为每一对这样做:

cat A_n.fasta A_t.fasta > A_nt.fasta

但我不想为每个 id 对手动执行此操作。

所以我尝试了这样的事情:

for f in *_n.fasta ; do cat $f *_t.fasta > $f*_prot_all.fasta; done

但它不起作用

for 循环对我来说是新的,所以解决方案可能很简单,但我无法解决它。

此外,我将需要它用于 pal2nal,其中我需要放置 2 个文件(蛋白质多重比对和 DNA 序列),这将是相同的工作,2 个文件具有相同的名称部分并需要输出每对一个文件。

你要不要试试:

#!/bin/bash

for f in *_n.fasta; do
    t=${f/_n./_t.}
    out=${f/_n./_prot_all.}
    cat "$f" "$t" > "$out"
done

其中 t=${f/_n./_t.} 将变量 f 中的子字符串 _n. 替换为 _t.,并为其分配一个新变量 t。至于 pal2nal 命令,您可以使用类似的文件名替换。