0

我完全知道可能已经发布了类似的问题,但是在搜索之后似乎我们问题的细节有所不同(或者至少我没有设法找到可以在我的情况下采用的解决方案)。

我目前有两个文件:"messyFile""wantedID"“messyFile”大小为80,000,000 X 2,500,而“wantedID”大小为1 x 462。在"messyFile"的第 253 行,有 2500 个 ID。但是,我想要的只是文件"wantedID"中的 462 个 ID 。假设 462 ID 是 2500 ID 的子集,我如何处理文件“messyFile”,使其仅包含有关 462 ID 的信息(即大小为80,000,000 X 462)。

非常感谢您的耐心等待!

ps:很抱歉造成混乱。但是,是的,这个问题可以归结为这样的事情。在"File#1"的第一行,有 10 个 ID。在"File#2"的第一行,有 3 个 ID("File#2"仅包含 1 行)。3 个 ID 是 10 个 ID 的子集。现在,我希望处理"File#1"以便它只包含有关"File#2"中列出的 3 个 ID 的信息。

ps2:“messyFile”是一个vcf文件,而“wantedID”可以是一个文本文件(我说“可以”是因为它很小,所以我几乎可以为它制作任何类型)

ps3:“文件#1”应该是这样的:

sample#1 sample#2 sample#3 sample#4 sample#5
    0        1       0        0        1
    1        1       2        0        2

“文件#2”应该是这样的:

sample#2 sample#4 sample#5

所需的输出应如下所示:

sample#2 sample#4 sample#5
   1        0        1
   1        0        2
4

2 回答 2

3

要解析 VCF 格式,请使用bcftools

http://samtools.github.io/bcftools/bcftools.html

专门针对您的任务,请参阅view命令:

http://samtools.github.io/bcftools/bcftools.html#view

例子:

bcftools view -Ov -S 462sample.list -r chr:pos -o subset.vcf superset.vcf

您将需要获得 SNP 的位置以在chr:pos上面指定。

您可以使用 DbSNP 执行此操作:

http://www.ncbi.nlm.nih.gov/SNP/index.html

只需确保将基因组构建与 VCF 文件中使用的相匹配。

您还可以使用plink

https://www.cog-genomics.org/plink2

但是,PLINK 对重复的 SNP 和其他事情很挑剔,所以除非您解决这些问题,否则它可能会抱怨。

awk我已经使用编程语言完成了您过去尝试的操作。为了您的理智,我建议使用上述工具之一:)

于 2016-08-30T01:34:28.650 回答
1

好的,我不知道什么是 vcf 文件,但如果您提供的 File#1 和 File#2 样本是包含制表符分隔列的文件,这将起作用:

declare -a data=(`head -1 data.txt`)
declare -a header=(`head -1 header.txt`)

declare fields
declare -i count
for i in "${header[@]}" ; do
  count=0
  for j in "${data[@]}" ; do
    count=$count+1;
    if [ $i == $j ] ; then
      fields=$fields,$count
    fi
  done
done

cut -f ${fields:1} data.txt

如果它们不是制表符分隔值,则可能可以针对实际数据格式进行修改。

于 2016-08-30T00:35:24.510 回答