使用awk或sed拆分字段

使用awk或sed拆分字段,sed,awk,split,Sed,Awk,Split,我有一个包含如下所示列的文件 chr1 412573 . A C 2754.00 . AC=2;AF=1.00;AN=2;DP=59;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=2;MLEAF=1.00;MQ=59.22;M Q0=0;QD=35.08;SB=-5.570e+02;resource.EFF=NON_SYNONYMOUS_CODING(MODERATE|MISSENSE|gCg/gTg|A124V |R

我有一个包含如下所示列的文件

 chr1 412573  .   A   C 2754.00      .  AC=2;AF=1.00;AN=2;DP=59;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=2;MLEAF=1.00;MQ=59.22;M  
 Q0=0;QD=35.08;SB=-5.570e+02;resource.EFF=NON_SYNONYMOUS_CODING(MODERATE|MISSENSE|gCg/gTg|A124V
|RBFA|protein_coding|CODING|ENSCAFT00000037436|5)
chr1 412573  .   A   C 2754.00      .  59    59.22    NON_SYNONYMOUS_CODING    MODERATE    MISSENSE    gCg/gTg    A124V    RBFA   protein_coding    CODING    ENSCAFT00000037436    5
我想拆分和提取第8列中的数据,如下所示

 chr1 412573  .   A   C 2754.00      .  AC=2;AF=1.00;AN=2;DP=59;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=2;MLEAF=1.00;MQ=59.22;M  
 Q0=0;QD=35.08;SB=-5.570e+02;resource.EFF=NON_SYNONYMOUS_CODING(MODERATE|MISSENSE|gCg/gTg|A124V
|RBFA|protein_coding|CODING|ENSCAFT00000037436|5)
chr1 412573  .   A   C 2754.00      .  59    59.22    NON_SYNONYMOUS_CODING    MODERATE    MISSENSE    gCg/gTg    A124V    RBFA   protein_coding    CODING    ENSCAFT00000037436    5

单向使用
awk

BEGIN {
        FS = ";"
}

{
        str = $NF
        sub( /^[^=]*=/, "", str )
        gsub( /[|()]/, "\t", str )
        print str
}
script.awk的内容

BEGIN {
        FS = ";"
}

{
        str = $NF
        sub( /^[^=]*=/, "", str )
        gsub( /[|()]/, "\t", str )
        print str
}
像这样运行:

awk -f script.awk infile
这将产生:

NON_SYNONYMOUS_CODING   MODERATE    MISSENSE    gCg/gTg A124V   RBFA    protein_coding  CODING  ENSCAFT00000037436  5
awk'/DP=/| |/MQ=/| |/EFF=/{gsub(“[\\\\()]”,“\t”);打印$2}'RS=''ORS='\t'FS='='
结果

59 59.22 NON_SYNONYMOUS_CODING MODERATE MISSENSE gCg/gTg A124V RBFA protein_coding CODING ENSCAFT00000037436 5 59 59.22非同义编码中度错义gCg/gTg A124V RBFA蛋白编码ENSCAFT0000037436 5
例如,如果对应的数据在第8列中,我如何在脚本中指定在第8列上工作?@user1779730:
$NF
表示最后一个字段,要选择第8列,请使用
$8
。上面的代码按您仅为第一行显示的方式拆分。但是,从第二行开始,它将AC打印为第一列,后跟剩余数据。你能解释一下为什么会发生这种情况吗。