【问题标题】:Read column and ouptut files with the name of each row使用每行的名称读取列和输出文件
【发布时间】:2018-06-11 02:51:41
【问题描述】:

我从事遗传学工作,我有这个命令行可以检索基因的 DNA 序列:

search -db gene -query "glutaminase-asparaginase [Gene/Protein Name] AND (bacteria [orgn] OR fungi [orgn] OR archaea [orgn]) AND alive [prop]" | efetch -format docsum | xtract -pattern GenomicInfoType
-element ChrAccVer -element ChrStart -element ChrStop |xargs -n 3 sh -c 'efetch -db nuccore -id "$0" -seq_start "$1" -seq_stop "$2" -format fasta'

输出是这样的(基因谷氨酰胺酶-天冬酰胺酶的三种生物的三个序列):

>NC_030957.1:c4121890-4120582 Colletotrichum higginsianum
TGAGAGCTTCTTACTTGTCGACGCTGTTGTTGCCAGCTCTGGTAGCCCATGGTTTCGCCTCCCCAGTCGG
>NC_016603.1:c898826-897759 Acinetobacter pittii
TGTTGACTAAAACTGTTAAATCTTTAGGTTTAGCGATGGGCTTATTAG
>NC_002947.4:c2800289-2799201 Pseudomonas putida
TGAATGCCGCACTGAAAACCTTCGCCCCAAGCGCACTCGCCCTGCTGCTGATCCTGCCATCCAGCGCCTC

但我需要使用多个基因名称进行此查询,并生成包含每个基因序列的输出文件。我有一个这样的 Excel 表格:

glutaminase-asparaginase                 ColumnB ColumnC
Polyphosphate kinase                     ColumnB Columnc
Inositol-polyphosphate multikinase       ColumnB Columnc

我正在尝试用这个脚本来做这个:

for i in $( cat PATH_TO_TABLE | cut -f1 ); do 
 esearch -db gene -query "$i [Gene/Protein Name] AND (bacteria [org .... >>"$i".fasta
done

但是脚本只读取了 Column 的第一个单词,例如在聚磷酸激酶中只读取“聚磷酸盐”并且输出文件是聚磷酸盐.fasta。当我需要查询超过“聚磷酸激酶”并且输出为 Polyphosphate_kinase.fasta

你能帮我解决这个问题吗?我将不胜感激。

【问题讨论】:

  • 嗨,是一个 bash 脚本:
  • #!/bin/sh for i in $( cat prueba.txt | cut -f1 ); do esearch -db gene -query "$i [Gene/Protein Name] AND (bacteria [orgn] OR fungi [orgn] OR archaea [orgn]) AND alive [prop]" | efetch -format docsum | xtract -pattern GenomicInfoType -element ChrAccVer -element ChrStart -element ChrStop |xargs -n 3 sh -c 'efetch -db nuccore -id "$0" -seq_start "$1" -seq_stop "$2" -format fasta' >> "$i".fasta done

标签: bash output row


【解决方案1】:

Bash 仅捕获第一个单词,因为它不知道第二个单词是另一列还是第一列的一部分。这是由名称中的空格引起的。要解决此问题,请将您的 Excel 文件导出为 CSV。它会给你这样的东西:

glutaminase-asparaginase,ColumnB,ColumnC
Polyphosphate kinase,ColumnB,ColumnC
Inositol-polyphosphate multikinase,ColumnB,ColumnC

然后您可以剪切',' 以拆分您的列。请注意,如果您的数据也包含',',这可能是个问题。然后,您可以将 Excel 导出为 CSV,但使用 ';' 分隔符(在我的 Excel 上提供)。如果您同时拥有','';',另一种选择是导出到带有制表符分隔符的.txt。但是然后......所以你必须选择最适合你的数据集的格式;-)

要将空格替换为'_',您可以使用echo "$Column1Value" | tr '[:space:]' '_'

另一种选择是直接在 Excel 电子表格中用 _ 替换所有空格,避免所有这些。

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 2020-07-11
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多