約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は次のことができると思います。
- ヘッダーの読み取り
data.txt
と列を行に変換 Grep
一致する数値行を取得します。list.txt
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