gpt4 book ai didi

regex - 每行提取多个独立的正则表达式匹配

转载 作者:行者123 更新时间:2023-12-04 17:48:09 29 4
gpt4 key购买 nike

对于下面的文件,我想提取“XC:Z:”和“XM:Z:”之后的两个字符串。例如:

  • 第一行输出应该是这样的:“TGGTCGGCGCGT, GAGTCCGT”
  • 第二行输出应该是这样的:“GAAGCCGCTTCC, ACCGACGG”

该文件的原始版本比以下示例多了几列和几百万行,但它应该让您明白:

    MOUSE_10        XC:Z:TGGTCGGCGCGT       RG:Z:A  XM:Z:GAGTCCGT   ZP:i:33
MOUSE_10 XC:Z:GAAGCCGCTTCC NM:i:0 XM:Z:ACCGACGG AS:i:16
MOUSE_10 ZP:i:36 XC:Z:TCCCCGGGTACA NM:i:0 XM:Z:GGGACGGG ZP:i:28
MOUSE_10 XC:Z:CAAATTTGGAAA RG:Z:A NM:i:1 XM:Z:GCAGATAG

此外,以下每个条件都将是一个奖励,但如果您可以让它发挥作用,则不是强制性的:

  • 使用标准的 bash 工具:awk、sed、grep 等(没有 GAWK、csvtools...)
  • 假设我们不知道 XC 和 XM 出现的顺序(虽然我相当确定 XC 几乎在第一位,但我不确定如何检查)。但是,在输出中,如果可能的话,XC 字符串应始终位于 XM 字符串之前。

这里的答案awk extract multiple groups from each line非常接近它,但每当我尝试使用 match(...) 时,我都会收到“意外标记附近的语法错误”消息。

期待您的解决方案!

谢谢,

菲利克斯

最佳答案

使用 sed,您可以在 XC:Z:XM:Z 之后捕获非空格字符:

sed -n 's/.*XC:Z:\([^[:blank:]]*\).*XM:Z:\([^[:blank:]]*\).*/\1, \2/p;' file

您可以为反转值添加第二个 s 命令:

sed -n 's/.*XC:Z:\([^[:blank:]]*\).*XM:Z:\([^[:blank:]]*\).*/\1, \2/;s/.*XM:Z:\([^[:blank:]]*\).*XC:Z:\([^[:blank:]]*\).*/\1, \2/;p;' file

关于regex - 每行提取多个独立的正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47395575/

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