使用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打印为第一列,后跟剩余数据。你能解释一下为什么会发生这种情况吗。