我的文件中有一些看起来像这样的行
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
答案 0 :(得分: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
答案 1 :(得分:0)
你的意思可能是
awk 'BEGIN{FS=":"}{ split($2, fields, "|"); print $1 ":" fields[1]; print $1 ":" fields[2]; }' my_file.txt