Sed
如何分隔由下劃線連接的基因名稱?
我想分開用破折號連接的基因名稱。我想用標籤替換。
我的輸入文件是:
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
。