请问如何将文件中第一列的所有值与文件 2 中的行文本相匹配,以便我可以复制文件 1 中所有对象 ID 的 fasta 序列?
文件1.csv文件
Object_ID, Length, Assignment
NODE_142_length_92872_cov_11.2497,92872,2005469
NODE_405_length_50717_cov_10.7964,50717,82654
NODE_775_length_33402_cov_18.9306,33402,1147
NODE_1008_length_27630_cov_17.7829,27630,1184
文件2 fasta.file
>NODE_1_length_501653_cov_19.284
TGGTGTGAGAGGCGCACCTCGCTAACTTTTCAGTTAGCGAGGCCGTCTACTCGATTAGCT
GTTATGAGCCCGACGAGCTACCAACTGCTCCATCCCGCGATATTGTGATGCAAAGGTAAG
>NODE_142_length_92872_cov_11.2497
ATTAACTACTAAGTTACAAATTTTAGTAGCTGTCCAGTTTAAAGGAAGTATTTCATATTT
TCGCTTACGTTAAATAGGAAAAGCAAGTTCTTTTTTGAGGTACCCAGTGAGTCTGATTTT
输出文件
>NODE_142_length_92872_cov_11.2497
ATTAACTACTAAGTTACAAATTTTAGTAGCTGTCCAGTTTAAAGGAAGTATTTCATATTT
TCGCTTACGTTAAATAGGAAAAGCAAGTTCTTTTTTGAGGTACCCAGTGAGTCTGATTTT
谢谢
答案1
这可以通过以下方式完成:
for i in `awk -F ',' '{print $1}' file1.csv `; do grep $i fasta.file ; done
在这里,我首先Object_ID
使用以下方法从 file1.csv 中提取:
awk -F ',' '{print $1}' file1.csv
然后围绕它运行一个循环以从其他文件中提取
答案2
假设调用了 Fasta 文件fasta.fa
并且调用了 CSV 文件sequences.csv
,并且您有SAM工具(一个相当标准的生物信息学包)已安装。
索引 Fasta 文件:
samtools faidx fasta.fa
将您想要提取的名称提取到
regions.txt
:awk -F, 'NR > 1 { print $1 }' <sequences.csv >regions.txt
该文件的格式为
region:start-stop
(每行一个),其中region
是序列名称,start
和stop
表示该序列中您想要提取的区域。我假设您想要提取完整的序列,所以我不会将start
orstop
放在那里。如果您想将 CSV 文件中的数字用作
start
和stop
:awk -F, 'NR > 1 { printf("%s:%d-%d\n", $1, $2, $3) }' <sequences.csv >regions.txt
将序列提取到
output.fa
:samtools faidx -c fasta.fa -r regions.txt >output.fa
regions.txt
在 Fasta 文件中找不到的序列名称将作为空序列输出output.fa
(并且samtools
也会对这些发出警告)。
也可以看看:
- 堆栈交换生物信息学网站