部分列名を抽出して新しい列を作成する

部分列名を抽出して新しい列を作成する

次の列を持つ次の行列があります。

TRINITY_DN12001_c0_g1_i3^ARC3_ARATH^MORN    1.52    1.20    1.25
TRINITY_DN109651_c0_g1_i1   12.38   32.55   62.98   37.92   9.05
TRINITY_DN26469_c0_g1_i1    1.91    0.00    2.62    2.92    2.22

各行について、最初の列(TRINITY_DN12001_c0_g1_i3)の一部を抽出し、そのIDで新しい列を作成したいと思います。私は新しいマトリックスが以前から抽出されたIDだけを持って本質的に同じであることを望みます。 awkを使うべきだと思いますが、この数字で何をすべきかわかりません。私はそれが次のように見えるようにしたいです:

TRINITY_DN12001_c0_g1_i3 TRINITY_DN12001_c0_g1_i3^ARC3_ARATH^MORN 1.52 1.20 1.25 
TRINITY_DN109651_c0_g1_i1 TRINITY_DN109651_c0_g1_i1 12.38 32.55 62.98 37.92 9.05 
TRINITY_DN26469_c0_g1_i1 TRINITY_DN26469_c0_g1_i1 1.91 0.00 2.62 2.92 2.22

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

答え1

この方法があなたに合っているかどうか教えてください。

sed 's/\([^\^ ]*\)/\1 \1/' file | tr -s ' '

出力:

TRINITY_DN12001_c0_g1_i3 TRINITY_DN12001_c0_g1_i3^ARC3_ARATH^MORN 1.52 1.20 1.25
TRINITY_DN109651_c0_g1_i1 TRINITY_DN109651_c0_g1_i1 12.38 32.55 62.98 37.92 9.05
TRINITY_DN26469_c0_g1_i1 TRINITY_DN26469_c0_g1_i1 1.91 0.00 2.62 2.92 2.22

これは予想される出力と一致します。

TRINITY_DN12001_c0_g1_i3 TRINITY_DN12001_c0_g1_i3^ARC3_ARATH^MORN 1.52 1.20 1.25 
TRINITY_DN109651_c0_g1_i1 TRINITY_DN109651_c0_g1_i1 12.38 32.55 62.98 37.92 9.05 
TRINITY_DN26469_c0_g1_i1 TRINITY_DN26469_c0_g1_i1 1.91 0.00 2.62 2.92 2.22

関連情報