私は医療遺伝学の分野で働いており、多くの場合、列の1つ(列5など)にテキスト文字列を持つ区切りテキストファイルがあります。私たちの専門用語は「突然変異」です
c.2458C>T
。
c.45_46delAA
c.749_754delinsTG
同様に、他のファイルでは次のように読み取ることができます。
p.Glu34*
またはp.Ala78_Arg80del
p.L378Ffs*11
とが必要ですが、省略することもできますc.
。p.
数字以外の文字はいくらでもあります。これらの数字は常に整数であり、通常長さは約1〜14です。
私のファイルのどこかに新しい列を追加したいです。最初のみ最初の例では、2458、45、749などの整数です。次に、この整数をキー値として使用して、ルックアップテーブルで複数の値をルックアップしようとします。
私のファイルの中には70,000行があり、手動で編集することはできません...
解決策は基本的であるほど良いです。 bash、sed、またはawkを使用して実行できますか?
例表は次のとおりです(正しい説明は次のとおりです)。
1 2 3 4 c.2458C>T
a b c d c.45_46delAA
a1 b2 c3 d4 p.Ala78_Arg80del
(注:列は空白ではなくタブで区切られています。)
フォーマットには仕様があります。ヒトゲノム変異コンソーシアム。どのプログラムもこの形式を使用しませんが(希望します!)、人々は出版物や医療報告書にこの形式を使用します。次の最新形式さまざまな呼び出し形式導入されたので、解析する方が簡単です。
ベストアンサー1
説明に従って、タブ区切りのファイルを入力とします。例:
$ cat file
1 2 3 4 c.2458C>T 6
a b c d c.45_46delAA or f
a1 b2 c3 d4 p.Ala78_Arg80del f6
sedを使う
5番目の列の最初の整数を見つけるには:
$ sed -r 's/([^\t]*\t){4}[^[:digit:]]*([[:digit:]]+).*/\2/' file
2458
45
78
上記はGNUでテストされましたsed
。 OSX または他の BSD システムの場合は、以下を試してください。
sed -E 's/([^\t]*\t){4}[^[:digit:]]*([[:digit:]][[:digit:]]*).*/\2/' file
awkを使う
$ awk '{sub(/^[^[:digit:]]*/, "", $5); sub(/[^[:digit:]].*/, "", $5); print $5;}' file
2458
45
78