我需要一些关于linux上bash的帮助;我需要找到一个执行以下操作的命令。
我有一个文件,其中的字段由符号分隔,我必须选择出现在该符号出现51次之后和出现在下一个符号之前的值。
这个bash命令如果应用于以下文件,将只返回/选择值0.02468
文件示例:AB=0.543;AC=1;AF=0.5;AN=1;BaseQRankSum=-8.244;DB;DP=178;DS;Dels=0;FS=0.568;GC=36;HRun=0;HaplotypeScore=3.5479;MQ=59.09;MQ0=0;MQRankSum=-1.171;QD=12.69;ReadPosRankSum=-0.923;SB=-1203.97;SBD=0.83;VQSLUD=7.2941;culprit=MQRankSum;set=GGSKSNP;CSQ=C|missense_variant|MODERATE|SLC7A2|ENSG00000003487|Transcript|ENST00000001234|protein_coding|7/8||ENST00000001234.10:c.1223G>C|ENSP00000001234.10:p.Cys416Ser|1234|1234|123|C/S|tGt/tCt|rs1234567||1||SNV|HGNC|123456|YES|||CCDS12345.1|ENSP00000004531|P52569||UPI1234A123A4||Ensembl|G|G|||tolerated(0.41)|benign(0)|Pfam_domain:PF12345&hmmpanther:PTHR12345&hmmpanther:PTHR12345:SF242&TIGRFAM_domain:TIGR00906|||0.0613|0|0.0202|0.2421|0|0.0501|0.0006809|0.0003488|0.02468|
有人能帮我做这个打击命令吗?
我试着上网查,但什么也找不到。
最佳答案
您可以使用sed -E
:
sed -E "s:^([^\|]*\|){51}([^\|]*).*$:\2:"
Try it online!
或者,可以使用pure bash:
read temp
for i in {1..51}; do
temp="${temp#*|}"
done
echo "${temp%%|*}"
Try it online!
awk
、IFS
和cut
方法见上文。我个人认为
cut
应该是赢家,因为它比线程中列出的任何其他方法都要简单得多。关于linux - bash,如何在N个定界符出现后检索值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55581173/