遺伝子リスト内の遺伝子の同定

遺伝子リスト内の遺伝子の同定

遺伝子リストファイルがあります。このような

    SWT21
    SSA1
    NRP1
    EFB1
    TFC3
    MDM10

リスト内の遺伝子の名前と、そのその他の基本情報を含む別のファイルがあります。 2番目のファイルは次のとおりです。

chrI    147593  151166  YAL001C -   TFC3
chrI    143706  147531  YAL002W +   VPS8
chrI    142173  143160  YAL003W +   EFB1
chrI    140759  141407  YAL004W +   YAL004W
chrI    139502  141431  YAL005C -   SSA1
chrI    137697  138345  YAL007C -   ERP2
chrI    136913  137510  YAL008W +   FUN14
chrI    135853  136633  YAL009W +   SPO7
chrI    134183  135665  YAL010C -   MDM10

最初のファイルの遺伝子名と同じ遺伝子名を持つ2番目のファイルの行を抽出したいと思います。

答え1

必要なのは簡単ですgrep

grep -Fwf gene_list.txt gene_info.txt

使用されるオプションは次のとおりです。

  • -w : 単語全体を検索します。これは、遺伝子名がERK1遺伝子と一致しないことを保証しますERK12-w標準オプションではありませんが、かなり一般的です)。
  • -f:ファイルから検索するパターンを読み込みます。この場合はgene_list.txt
  • -F: パターンを正規表現ではなく文字列として扱います。これにより、このような遺伝子名TOR*(存在する場合)が一致しなくなりますTORRRRRR

注:これは次のように想定されます。スペースなしリスト内の遺伝子名を囲みます。ある場合は、まず削除する必要があります(ここではGNUを使用sed)。

sed -i 's/ //g' gene_list.txt

答え2

例ではアッウィキ:

awk 'FNR==NR {arr[$0];next} $6 in arr' gene_list info_list

Wikiエントリからコピーされた説明:

  • FNR == NR:このテストは、レコード数がファイル内のレコード数と等しい場合に真です。これは最初のファイルでのみ機能し、2番目のファイルの場合、NRはfile1 + FNRの行数に等しくなります。
  • arr[$0]: これは、行全体に基づいて配列要素インデックスを生成する古典的な手法です。これにより、file1 名を含む配列が作成されます。
  • next: 次のレコードに移動するため、file1 は処理されなくなりました。
  • $6 in arr: $1 が arr、つまり file1 に存在する場合、基本操作が実行され、その行が印刷されるため、これは file2 のレコードでのみ発生します。

答え3

さらに堅牢にするには、遺伝子のリストを行の末尾から一致する正規表現に変更できます。これは機能しなければならず、POSIXと互換性があります。

sed 's/[[:space:]]*$/[[:space:]]*$/' gene_list | grep -wf - gene_info

gene_listまたは(質問の例に従って)前にスペースを追加します。

sed 's/$/[[:space:]]*$/; s/[[:space:]]//' gene_list |
  grep -wf - gene_info

もちろん、遺伝子名に正規表現として解釈される文字が含まれていると機能しません。ただし、この場合は、sedエスケープするために追加の代替式を追加する必要がありますs:\[:\[:

答え4

egrep -wi「遺伝子間誘導パイプラインを含む完全な遺伝子のリスト(1)」「ファイル名にすべての遺伝子を含む(2)」などのコマンドを提供することで、Linuxでgrepコマンドを使用することもできます。ここで、genelist(1) は遺伝子のリストです (番号 20、gene(2)) には遺伝子ファイル全体 (番号 1000) が含まれています。

関連情報