我有一个awk
解析器,适用于所有数据输入但只有一个,我遇到了麻烦。问题在于以下规则,步骤1和2来自$2
(NC_000013.10:g.20763686_20763687delinsA),步骤3和4来自$1
(NM_004004.5:c.34_35delGGinsT)。
跳过标题
13 20763686 20763687 GG T
Input Variant Errors Chromosomal Variant Coding Variant(s)
NM_004004.5:c.34_35delGGinsT NC_000013.10:g.20763686_20763687delinsA NM_004004.5:c.34_35delinsT XM_005266354.1:c.34_35delinsT XM_005266355.1:c.34_35delinsT XM_005266356.1:c.34_35delinsT
awk 'NR>1 {split($2,a,"[_.>]");b=substr(a[4],1,length(a[4]-1));print a[2]+0,b,b,substr(a[4],length(a[4])),a[5]}' OFS="\t" out_position.txt > out_parse.txt
答案 0 :(得分:0)
我认为在这种情况下,你最好使用正则表达式。这种sed单行产生了所需的输出:
$ sed -nr 's/.*del([A-Z]+)ins([A-Z]+).*NC_0{4}([0-9]+).*g\.([0-9]+)_([0-9]+).*/\3\t\4\t\5\t\1\t\2/p' file
13 20763686 20763687 GG T
它不会赢得任何美容奖项,但希望它相当清楚发生了什么。括号中的部分将被捕获并在输出中使用,由制表符分隔。