Sed

如何分隔由下劃線連接的基因名稱?

  • February 16, 2017

我想分開用破折號連接的基因名稱。我想用標籤替換。

我的輸入文件是:

Cedr3g0570.1_XP_019283.1
Cedr4g7930.2_XP_019241.1
Cedr5g005170.1_C0LGS3.1
Cedr7g0290.5_XP_01921.1
CT35v5_contig_2082_1.6_XP_0272.1
CT35v5_Cedr2g060.1_GAU97.1
CT7New_004.1_XP_01996.1

但我想要以下輸出:

Cedr3g0570.1            XP_019283.1
Cedr4g7930.2            XP_019241.1
Cedr5g005170.1          C0LGS3.1
Cedr7g0290.5            XP_01921.1
CT35v5_contig_2082_1.6  XP_0272.1
CT35v5_Cedr2g060.1      GAU97.1
CT7New_004.1            XP_01996.1

問題是我不能簡單地替換第一個破折號,因為我有一些名稱中帶有破折號的基因,例如 CT35v5_contig_2082_1.6。我嘗試使用sed 's/_/\t/'但它對某些基因不起作用,例如 CT35v5_contig_2082_1.6

sed 's/\(\.[0-9]\)\(_\)/\1 /' inputfile | column -t

正則表達式/\.[0-9]_/似乎與您的情況相匹配,因此我使用括號將其分成兩個反向引用組,並列印第一組和一些空格,從而分隔您的列,然後可以使用column -t.

看來您要替換的下劃線總是在一個點.後面跟著一個數字[0-9]

sed 's|\.\([0-9]\)_|.\1\t|'

這將搜尋一個文字點\.後跟一個數字,我們將其保存在一個組中,\([0-9]\)後跟一個下劃線_。將其替換為一個點、我們保存的第一組\1和一個選項卡\t

引用自:https://unix.stackexchange.com/questions/345275