基于分隔符分隔到新行

时间:2017-06-18 13:57:11

标签: shell awk 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

2 个答案:

答案 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