使用具有特定id的文件将数据从另一个文件提取到单独的文件中,然后使用它们获取值



我有一个文件,其中列出了一些id:

id1
id2
id3 
etc

我想使用这些id从文件中提取数据(id发生在每个文件中),并将这些id中的每个id的输出保存到一个单独的文件(id是蛋白质家族名称,我想从特定家族中获取每个蛋白质)。而且,当我有了每个蛋白质的名称时,我想用这个名称来获得这些蛋白质(.fasta格式),这样它们就会按它们的家族分组(它们将保持在同一组中)

所以我试着这样做(我知道它会把所有的id转储到一个文件):

#! /bin/bash
for file in *out
do grep -n -E 'id1|id2|id3' /directory/$file >> output; done

我将感谢任何帮助,如果不是一切都清楚,我将很高兴说明。

编辑:我会尽量澄清,抱歉给您带来不便:

有一个文件名为"pfamacc"内容如下:

PF12312
PF43555
PF34923

等等-这些是我需要访问其他文件的id,这些文件的结构类似于"something_something.faa.out">

<acc_number> <aligment_start> <aligment_end> <pfam_acc>
RXOOOA 5 250 PF12312
OC2144 6 200 PF34923

我需要这些加入编号,这样我就可以从看起来像这样的文件中获得蛋白质序列:

>RXOOOA
ASDBSADBASDGHH
>OC2144
SADHHASDASDCJHWINF

假设在与后续内容相同的目录下有一个文件ids_file.txt:

id1
id2
id3
id4

在同一目录下还有一个名为id1的文件,其内容如下:

Bla bla bla
id1
and id2
is
here id4

下面的脚本可以帮到你:

#!/bin/sh
IDS=$(cat ids_file.txt)
IDS_IN_ONE=$(cat ids_file.txt | tr 'n' '|' | sed -r 's/(|)?|$//')
echo $IDS_IN_ONE
for file in $IDS; do
grep -n -E "$IDS_IN_ONE" ./$file >> output
done

文件output然后有以下结果:

2:id1
3:and id2
5:here id4

读取一个列表需要被交叉引用以获得第二个列表,然后需要用于收集fasta。

从以下3个文件开始…

starting_values.txt

PF12312
PF43555
PF34923

cross_reference.txt

<acc_number> <aligment_start> <aligment_end> <pfam_acc>
RXOOOA 5 250 PF12312
OC2144 6 200 PF34923

find_from_file.fasta

>RXOOOA
ASDBSADBASDGHH
>OC2144
SADHHASDASDCJHWINF
SADHHASDASDCJHWINF
>NC11111
IURJCNKAERJKADSF
for i in `cat starting_values.txt`; do awk -v var=$i 'var==$4 {print $1}' cross_reference.txt; done > needed_accessions.txt

如果多行FASTA变为单行。https://www.biostars.org/p/9262/

awk '/^>/ {printf("n%sn",$0);next; } { printf("%s",$0);}  END {printf("n");}' find_from_file.fasta > find_from_file.temp
for i in `cat needed_accessions.txt`; do grep -A 1 "$i" find_from_file.temp; done > found_sequences.fasta

最终输出……

found_sequences.fasta

>RXOOOA
ASDBSADBASDGHH
>OC2144
SADHHASDASDCJHWINFSADHHASDASDCJHWINF

相关内容

  • 没有找到相关文章

最新更新