首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用具有特定ID的文件将另一个文件中的数据提取为单独的文件,然后使用它们获取值。

使用具有特定ID的文件将另一个文件中的数据提取为单独的文件,然后使用它们获取值。
EN

Stack Overflow用户
提问于 2022-11-14 14:58:04
回答 2查看 48关注 0票数 0

我有一个文件中列出了一些ID,如下所示:

代码语言:javascript
运行
复制
id1
id2
id3 
etc

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

因此,我尝试这样做(我知道它会将所有I转储到一个文件中):

代码语言:javascript
运行
复制
#! /bin/bash

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

我将感谢任何帮助,如果不是一切都清楚的话,我会很乐意说明的。

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

因此,有一个名为"pfamacc“的文件,其内容如下:

代码语言:javascript
运行
复制
PF12312
PF43555
PF34923

依此类推--这些是我访问其他文件所需要的ID,这些文件的结构类似于"something_something.faa.out“。

代码语言:javascript
运行
复制
<acc_number> <aligment_start> <aligment_end> <pfam_acc>
RXOOOA 5 250 PF12312
OC2144 6 200 PF34923

我需要这些连接号,这样我就可以从如下文件中获得蛋白质序列:

代码语言:javascript
运行
复制
>RXOOOA
ASDBSADBASDGHH

>OC2144
SADHHASDASDCJHWINF
EN

回答 2

Stack Overflow用户

发布于 2022-11-14 16:34:16

假设在同一个目录中有一个包含后续内容的文件ids_file.txt

代码语言:javascript
运行
复制
id1
id2
id3
id4

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

代码语言:javascript
运行
复制
Bla bla bla
id1
and id2
is
here id4

那么这个脚本可能会有帮助:

代码语言:javascript
运行
复制
#!/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有以下结果:

代码语言:javascript
运行
复制
2:id1
3:and id2
5:here id4
票数 0
EN

Stack Overflow用户

发布于 2022-11-18 18:07:41

阅读一个列表需要相互参照才能得到第二个列表,然后需要用来收集FASTA。

从以下三个文件开始..。

starting_values.txt

代码语言:javascript
运行
复制
PF12312
PF43555
PF34923

cross_reference.txt

代码语言:javascript
运行
复制
<acc_number> <aligment_start> <aligment_end> <pfam_acc>
RXOOOA 5 250 PF12312
OC2144 6 200 PF34923

find_from_file.fasta

代码语言:javascript
运行
复制
>RXOOOA
ASDBSADBASDGHH
>OC2144
SADHHASDASDCJHWINF
SADHHASDASDCJHWINF
>NC11111
IURJCNKAERJKADSF
代码语言:javascript
运行
复制
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/

代码语言:javascript
运行
复制
awk '/^>/ {printf("\n%s\n",$0);next; } { printf("%s",$0);}  END {printf("\n");}' find_from_file.fasta > find_from_file.temp
代码语言:javascript
运行
复制
for i in `cat needed_accessions.txt`; do grep -A 1 "$i" find_from_file.temp; done > found_sequences.fasta

最后输出..。

found_sequences.fasta

代码语言:javascript
运行
复制
>RXOOOA
ASDBSADBASDGHH
>OC2144
SADHHASDASDCJHWINFSADHHASDASDCJHWINF
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74433625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档