文字列の一部を抽出する最も簡単な方法は何ですか?

文字列の一部を抽出する最も簡単な方法は何ですか?

次の列を持つファイル(bigfile.txt)があります。

NW_017095471.1  Gnomon  mRNA    108321  109565  .   +   .   ID=rna34;Parent=gene27;Dbxref=GeneID:108565285,Genbank:XM_017925071.1;Name=XM_017925071.1;gbkey=mRNA;gene=LOC108565285;model_evidence=Supporting evidence includes similarity to: 7 Proteins%2C and 100%25 coverage of the annotated genomic feature by RNAseq alignments%2C including 30 samples with support for all annotated introns;product=transmembrane protein 126A;transcript_id=XM_017925071.1
ID=gene27;Dbxref=GeneID:108565285;Name=LOC108565285;gbkey=Gene;gene=LOC108565285;gene_biotype=protein_coding
ID=gene28;Dbxref=GeneID:108569527;Name=LOC108569527;gbkey=Gene;gene=LOC108569527;gene_biotype=protein_coding
ID=gene78;Dbxref=GeneID:108562956;Name=LOC108562956;gbkey=Gene;gene=LOC108562956;gene_biotype=protein_coding

別のリストがあります。

gene27
gene28

各行を取得し、IDフィールドに対してgrepを実行し、「Name =」の後に「LOC#」を返したいと思います。

gene=$line
`grep $gene";" bigfile.txt | sed -e 's/Name=

返品

LOC108565285
LOC108569527

この部分をどのように抽出できますか?

ベストアンサー1

これがタブで区切られた9番目のフィールドであるとしましょう。GFFファイルgene(属性フィールド)以下を使用して、特定の属性(別々のファイルから読み取られる)に対応する属性値を抽出できます。IDawk

BEGIN { FS = "\t" }

FNR == NR {
    # Read IDs into a hash as keys.
    ids[$1] = 1
    next
}

$3 == "gene" {
    # Split the attribute field into separate key-value pairs.
    n = split($9, keyvalues, ";")

    id = ""    # Not found a gene ID yet
    gene = ""  # No gene name to print

    # Loop over the key-value pairs, split them on the "="
    # and extract the gene name and gene ID.
    for (i = 1; i <= n; ++i) {
        split(keyvalues[i], attr, "=")
        if (attr[1] == "ID") {
            if (attr[2] in ids)
                id = attr[2]
            else
                next  # This line is not of interest
        }
        else if (attr[1] == "gene")
            gene = attr[2]
    }

    if (id != "" && gene != "")
        print gene
}

file.gff列9で指定されたデータと、次の場所にある遺伝子IDのリストを含むGFFファイルでそれを実行しますid.list

$ awk -f script.awk id.list file.gff
LOC108565285
LOC108569527

遺伝子IDのリストはFNR == NRコードブロックの最初のファイルから読み取られ、最後のブロックはコマンドラインawkで提供されている2番目(およびすべての後続)ファイル内の遺伝子フィーチャラインの属性フィールドを処理します。

コードはawk、GFFファイルIDgene属性に単一の値しか含まれていない(カンマ区切り値のリストではない)、その値が引用符で囲まれていないと想定しています。

遺伝子名と遺伝子IDのリスト(2つの列)に出力するには、ステートメントをprint geneに変更しますprint id, gene

おすすめ記事