2列目の括弧以外のものをすべて削除します

2列目の括弧以外のものをすべて削除します

次のようなファイルがあります:

gene ID              protein
Solyc06g062540    (Z) PYROPHOSPHATASE 3 (PTHR20889:SF0)
Solyc10g075050    ALBUMIN SUPERFAMILY (PTHR33076:SF11)
Solyc07g061760    SUBFAMILY (PTHR24177:SF35)

ファイルはタブ区切りで、最初の列(遺伝子ID)と2番目の列(タンパク質名)の間にタブがあります。(タンパク質名にはスペースを含めることができますが、タブを含めることはできません。)タンパク質名には括弧で囲まれた文字列が含まれます。例:(PTHR33076:SF11)これはタンパク質です。ID最初の列は保持し、2 番目の列のタンパク質 ID (およびそれを囲む括弧) 以外のすべてを削除します。出力は次のようになります。

Solyc06g062540    (PTHR20889:SF0)
Solyc10g075050    (PTHR33076:SF11)
Solyc07g061760    (PTHR24177:SF35)

どうすればいいでしょうか? 「マーク」機能を使用して括弧内のすべての ID をマークし、(\w+\d+:\w+\d+)括弧内のすべての ID を強調表示するように入力しましたが、操作できません。注意として、一部のタンパク質名には括弧内の他の文字列があります (たとえば、タンパク質名(Z)と必要な ID 値が含まれている最初の行を参照してください)。これらは保持したくありません。

答え1

正規表現の検索と置換でこれを行うことができます。Ctrl+を押してH置換ダイアログを開きます。検索モードが になっていることを確認してくださいRegular Expression

検索対象:

(^[^\t\r\n]+\t)[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]*

と置換する:

\1\2

パターンの説明:

[^\t\r\n]+タブ、改行、または復帰を含まない任意の文字列です。これは、ファイルの 1 列のテキストのみに一致する必要があります。

^[^\t\r\n]+^先頭によって一致が行の先頭に制限されるため、最初の列の内容と一致します。

最初のキャプチャ グループは、(^[^\t\r\n]+\t)最初のフィールドと次のタブの内容と一致します。

[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]*2 番目のフィールドの内容と一致し、括弧内の表現が存在する場合にのみ一致します。

2 番目のキャプチャ グループは(\(\w+\d+:\w+\d+\))括弧内の式と一致します。

置換パターンは、\1\2最初のキャプチャ グループと 2 番目のキャプチャ グループを返します。一致のその部分はキャプチャ グループに含まれていないため、これにより 2 番目のフィールドの周囲のテキストが実質的に削除されます。

答え2

\t.*( (括弧で囲まれた) タンパク質 ID が常に行の最後にある場合 (示されているように)、 (または場合によっては\t[^\r\n]*() を検索して に置き換えるだけで十分なはずです\t(

関連情報