特定の文字列を含む出力ライン

特定の文字列を含む出力ライン

次のファイルがあります。

Chr Start   End Ref Alt Func.refGene    Gene.refGene    ExonicFunc.refGene  AAChange.refGene    Func.knownGene  Gene.knownGene                                                      
1   53387379    53387379    G   C   UTR5    ECHDC2  NA  NA  UTR5    ECHDC2(FFF)
1   53387380    53387380    G   C   UTR5    C2(hhh) NA  NA  UTR5    C2(FFF)
1   1647814 1647814 T   C   exonic  CDK11A,CDK11B   synonymous SNV  NA  exonic  CDK11A,CDK11B
1   1647814 1647814 T   C   exonic  CDK11A23,CDK11B23   synonymous SNV  NA  exonic  CDK11A23,CDK11B23
1   1670958 1670958 C   G   exonic  SLC35E2A    synonymous SNV  NA  exonic  SLC35E2
1   1684347 1684347 -   CCT exonic  NADK    nonframeshift insertion NA  exonic  NADK
1   7069620 7069620 T   C   intronic    PTPN6(ggg),IL3  NA  NA  intronic    PTPN6(ggg),IL3

遺伝子「C2」、「CDK11A」、「IL3」を含む全てのラインを出力したい。明らかに、より大きなファイルとより長い遺伝子セットがありますが、これは便宜のための小さな例です。

私は次のスクリプトを使用しています。

tail -n+1 Book3.txt | awk -F'\t' 'BEGIN{OFS=FS}{if(NR==1 || $7=="C2" || $7~/C2[(]/ || $7~/C2/  || $11=="C2" || $11~/C2[(]/ || $11~/C2/ || 
$7=="CDK11A" || $7~/CDK11A[(]/ || $7~/CDK11A/ || $11=="CDK11A" || $11~/CDK11A[(]/ || $11~/CDK11A/ || 
$7=="IL3" || $7~/IL3[(]/ || $7~/IL3/ || $11=="IL3" || $11~/IL3[(]/ || $11~/IL3/) {print($0)}}' > Book3.genes.txt

スクリプトは、次のように不要な行を出力します。

Chr     Start   End     Ref     Alt     Func.refGene    Gene.refGene    ExonicFunc.refGene      AAChange.refGene        Func.knownGene  Gene.knownGene
1       53387379        53387379        G       C       UTR5    ECHDC2  NA      NA      UTR5    ECHDC2(FFF)
1       53387380        53387380        G       C       UTR5    C2(hhh) NA      NA      UTR5    C2(FFF)
1       1647814 1647814 T       C       exonic  CDK11A,CDK11B   synonymous SNV  NA      exonic  CDK11A,CDK11B
1       1647814 1647814 T       C       exonic  CDK11A23,CDK11B23       synonymous SNV  NA      exonic  CDK11A23,CDK11B23
1       7069620 7069620 T       C       intronic        PTPN6(ggg),IL3  NA      NA      intronic        PTPN6(ggg),IL3

2行と5行は必要ありません。出力に与えられた遺伝子のリストだけを含めるようにスクリプトをどのように変更しますか?

ベストアンサー1

一致させる遺伝子を1行に1つずつファイルに入れます。それからgrep呼び出しだけです。

grep -Fwf genes.txt Book3.txt 

タイトルを維持するには:

{ head -n1 Book3.txt; grep -Fwf genes.txt Book3.txt; }

グレブオプション:

  • -F「固定文字列」 - 正規表現を無効にし、部分文字列一致のみを検索します。
  • -w「単語一致」 - 単語全体に一致する項目のみを検索します。
  • -f file- パターンを含むファイルの指定(1行に1つ)

サンプルデータの使用

$ cat genes.txt 
C2
CDK11A
IL3
$ { head -n1 Book3.txt; grep -Fwf genes.txt Book3.txt; }
Chr Start   End Ref Alt Func.refGene    Gene.refGene    ExonicFunc.refGene  AAChange.refGene    Func.knownGene  Gene.knownGene
1   53387380    53387380    G   C   UTR5    C2(hhh) NA  NA  UTR5    C2(FFF)
1   1647814 1647814 T   C   exonic  CDK11A,CDK11B   synonymous SNV  NA  exonic  CDK11A,CDK11B
1   7069620 7069620 T   C   intronic    PTPN6(ggg),IL3  NA  NA  intronic    PTPN6(ggg),IL3

おすすめ記事