2017-06-18 76 views
1

我在文件中的一些行看起来像这样基于分隔符

ENSG00000003096:E4.2|E5.1 
ENSG00000035115:E14.2|E15.1 
ENSG00000140987:E5.2|ENSG00000140987:E6.1 
ENSG00000154358:E46.1|E47.1 

我想将它们划分到基于分隔符一个新行分离到一个新的生产线“|” ,使得它成为

ENSG00000003096:E4.2 
    ENSG00000003096:E5.1 
    ENSG00000035115:E14.2 
    ENSG00000035115:E15.1 
    ENSG00000140987:E5.2 
    ENSG00000140987:E6.1 
    ENSG00000154358:E46.1 
    ENSG00000154358:E47.1 
+2

那么,出了什么问题? – karakfa

回答

3

随着输入数据作为你的问题建议,这似乎与GNU awk的工作:

awk -F: -v RS="[|]|\n" 'NF==1{print p FS $0;next}NF!=1{p=$1}1' file1 
#Output 
ENSG00000003096:E4.2 
ENSG00000003096:E5.1 
ENSG00000035115:E14.2 
ENSG00000035115:E15.1 
ENSG00000140987:E5.2 
ENSG00000140987:E6.1 
ENSG00000154358:E46.1 
ENSG00000154358:E47.1 

逻辑:

|\n被用作记录分离器RS
:用作字段分隔FS
如果线具有多于一个的字段然后保持第一场在变量p
如果线路只有一个场然后打印前$ 1 =变量p和线$ 0

0

你可能意味着像

awk 'BEGIN{FS=":"}{ split($2, fields, "|"); print $1 ":" fields[1]; print $1 ":" fields[2]; }' my_file.txt