タブで区切られたファイル列のテキスト文字列から最初の整数を抽出するには?

タブで区切られたファイル列のテキスト文字列から最初の整数を抽出するには?

私は医療遺伝学の分野で働いており、多くの場合、列の1つ(列5など)にテキスト文字列を持つ区切りテキストファイルがあります。私たちの専門用語は「突然変異」です
c.2458C>Tc.45_46delAAc.749_754delinsTG

同様に、他のファイルでは次のように読み取ることができます。
p.Glu34*またはp.Ala78_Arg80delp.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

おすすめ記事