2017-06-18 78 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