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
命令,您可以使用类似的文件名替换。
我在一个目录中有 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
命令,您可以使用类似的文件名替换。