gpt4 book ai didi

regex - 如何比较两个文件之间字段的特定部分

转载 作者:行者123 更新时间:2023-12-01 09:04:45 25 4
gpt4 key购买 nike

我正在努力完成以下任务,即在两个具有制表符分隔字段的文件之间比较部分字段 ($3)。文件与其他字段 $1-2 逐行匹配,但 $3 略有不同。我只对 3 美元的一部分感兴趣,即 AF 的数值。 $3 中的所有子字段(?)都用分号分隔,但正如您所见,AF 值并不总是在该位置(有时是#2,有时是#3)。我想拔出第三个字段中 AF 的值在文件之间不同的行。

例如,这里是示例文件 1:

dmel_mitochondrion_genome       18984   AB=0.743;AC=4;AF=0.50;AN=8;BaseQRankSum=$
dmel_mitochondrion_genome 19066 AB=0.684;AC=4;AF=0.50;AN=8;BaseQRankSum=$
dmel_mitochondrion_genome 19074 AB=0.321;AC=4;AF=0.50;AN=8;BaseQRankSum=$
dmel_mitochondrion_genome 19212 AC=8;AF=1.00;AN=8;DP=382;DS;Dels=0.00;FS$
dmel_mitochondrion_genome 19285 AC=8;AF=1.00;AN=8;DP=342;DS;Dels=0.00;FS$
dmel_mitochondrion_genome 19384 AC=8;AF=1.00;AN=8;DP=400;DS;Dels=0.00;FS$
dmel_mitochondrion_genome 19395 AC=8;AF=1.00;AN=8;DP=398;DS;Dels=0.00;FS$
dmel_mitochondrion_genome 19461 AB=0.524;AC=4;AF=0.50;AN=8;BaseQRankSum=$
dmel_mitochondrion_genome 19472 AB=0.527;AC=4;AF=0.50;AN=8;BaseQRankSum=$
dmel_mitochondrion_genome 19475 AC=8;AF=1.00;AN=8;BaseQRankSum=0.936;DP=$

和示例文件2:

dmel_mitochondrion_genome       18984   AB=0.730;AC=4;**AF=1.00**;AN=8;BaseQRankSum=$
dmel_mitochondrion_genome 19066 AB=0.742;AC=4;AF=0.50;AN=8;BaseQRankSum=$
dmel_mitochondrion_genome 19074 AB=0.345;AC=4;AF=0.50;AN=8;BaseQRankSum=$
dmel_mitochondrion_genome 19212 AC=8;AF=1.00;AN=8;BaseQRankSum=1.722;DP=$
dmel_mitochondrion_genome 19285 AC=8;AF=0.50;AN=8;BaseQRankSum=1.721;DP=$
dmel_mitochondrion_genome 19384 AC=8;AF=1.00;AN=8;BaseQRankSum=1.458;DP=$
dmel_mitochondrion_genome 19395 AC=8;AF=1.00;AN=8;DP=391;DS;Dels=0.00;FS$
dmel_mitochondrion_genome 19461 AB=0.510;AC=4;AF=0.50;AN=8;BaseQRankSum=$
dmel_mitochondrion_genome 19472 AB=0.526;AC=4;AF=0.50;AN=8;BaseQRankSum=$
dmel_mitochondrion_genome 19475 AC=8;AF=0.50;AN=8;BaseQRankSum=-1.732;DP$

我想得到的输出是 file1 中的以下几行:

dmel_mitochondrion_genome       18984   AB=0.743;AC=4;AF=0.50;AN=8;BaseQRankSum=$
dmel_mitochondrion_genome 19285 AC=8;AF=1.00;AN=8;DP=342;DS;Dels=0.00;FS$
dmel_mitochondrion_genome 19475 AC=8;AF=1.00;AN=8;BaseQRankSum=0.936;DP=$

甚至是这样的:

dmel_mitochondrion_genome       18984   AF=0.50  
dmel_mitochondrion_genome 19285 AF=1.00
dmel_mitochondrion_genome 19475 AF=1.00

我尝试使用 awk,但不知道如何比较部分字段而不是整个字段。我终于想出了如何使用正则表达式从一个文件的每一行中查找 AF 的值,但不知道如何捕获该值以将其与另一个文件中的另一个值进行比较。非常感谢任何帮助!

最佳答案

以下命令应该为您提供所需格式的每个文件。然后你可以对它们做一个 diif...

awk '{s=$0; split(s, a, "AF="); split(a[1], a1); split(a[2], a2, ";"); print a1[1] " " a1[2] " AF=" a2[1]}'

关于regex - 如何比较两个文件之间字段的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10080317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com