awk脚本用两个文件字段中的信息解析案例

时间:2015-04-08 17:10:13

标签: awk

我有一个awk解析器,适用于所有数据输入但只有一个,我遇到了麻烦。问题在于以下规则,步骤1和2来自$2(NC_000013.10:g.20763686_20763687delinsA),步骤3和4来自$1(NM_004004.5:c.34_35delGGinsT)。

解析规则:

跳过标题

  1. NC_之后的4个零(并非总是如此)和之前的数字。
  2. 克。 ###(在下划线之前)_ ###(#后_)
  3. " del"之后的字母直到“ins”
  4. " ins"
  5. 之后的字母

    期望的输出:

    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
    

1 个答案:

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

它不会赢得任何美容奖项,但希望它相当清楚发生了什么。括号中的部分将被捕获并在输出中使用,由制表符分隔。