基于定界符分隔到新行
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
我的文件中有一些行看起来像这样
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