用語リストを含むすべての列を抽出する

用語リストを含むすべての列を抽出する

約320行と約1800列(1.9MB)のデータファイル()がありdata.txt(すべての行について)、特定の列を抽出する必要があります。全体的なレイアウトdata.txtは次のとおりです。

 ID           Adipocyte - breast, donor2.CNhs11969.11327-117E4   ....
HGNC:8888                        0                               .... 
HGNC:9999                     123.92                             ....
HGNC:1000                      9.31                              .... 

list.txt抽出する必要がある列リスト(ファイル内)がありますが、リストは列用語のCNhsXXXXX識別子のみで構成されています(たとえば、上記の例では、リストには次の項目のみが含まれています)。CNhs11969、全期間ではありません脂肪細胞 - 乳房、ドナー 2.CNhs11969.11327-117E4)。

以前に行リストを取得するにはgrepを使用しましたが、列リストは使用したことがありません。見てきましたが、複数の用語を使用して複数の列を特定する方法を見つけることはできません。私はUnixに初めて触れたので(コンピューティング経験の少ない生物学者です)、grepがこれを行うことができるかどうかはわかりません。

どんな助けでも大変感謝します。

編集:私の出力例は、〜1800列のうち〜850列です(list.txt私のファイルの用語のみを含む)。例:私のリストにCNhs5006とCNhs7021のみが含まれている場合、ヘッダーにこれらの用語が含まれる列のみが必要です。例data.txt:

ID        XXXCNhs5006XXX   XXXCNhs6025XXX   XXXCNhs7021XXX   XXXCNhs8095XXX
HGNC:1111     1.23                 1.53             9.21            0
HGNC:2222     1.95                73.92               0           123.29 

望ましい出力の例:

ID         XXXCNhs5006XXX   XXXCNhs7021
HGNC:1111          1.23          9.21
HGNC:2222          1.95           0

私はlist.txt単純な用語のリストです(列1個、行〜850個、行ごとに検索語1個)。例:

CNhs1111 CNhs2222 CNhs3333 CNhs4444

ベストアンサー1

OPは次のことができると思います。

  1. ヘッダーの読み取りdata.txtと列を行に変換
  2. Grep一致する数値行を取得します。list.txt
  3. data.txt渡すcut

列がタブで区切られている場合、スクリプトは次のようになります。

cut -f 1,$(
    head -n1 data.txt |
    tr '\t' '\n' |
    grep -nf list.txt |
    sed ':a;$!N;s/:[^\n]*\n/,/;ta;s/:.*//'
) data.txt

おすすめ記事