【问题标题】:Separating onto a new line based on a delimiter根据分隔符分隔到新行
【发布时间】:2017-06-18 13:57:11
【问题描述】:

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

 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

【问题讨论】:

  • 那么,出了什么问题?

标签: shell awk delimiter


【解决方案1】:

根据您的问题中建议的输入数据,这似乎适用于 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 = variable p 和行 $0

【讨论】:

    【解决方案2】:

    你的意思可能是这样的

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2013-02-27
      • 2018-10-25
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多