基于定界符分隔到新行

Separating onto a new line based on a delimiter

我的文件中有一些行看起来像这样

 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

你的意思可能类似于

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

根据您的问题中建议的输入数据,这似乎适用于 gnu awk:

awk -F: -v RS="[|]|\n" 'NF==1{print p FS [=10=];next}NF!=1{p=}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