首页 > 解决方案 > 使用每行的名称读取列和输出文件

问题描述

我从事遗传学工作,我有这个命令行可以检索基因的 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

你能帮我解决这个问题吗?我会很感激。

标签: bashoutputrow

解决方案


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

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

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

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

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


推荐阅读