gpt4 book ai didi

regex - 如果第二行包含与第一行相同的匹配项,我如何打印 2 行?

转载 作者:行者123 更新时间:2023-11-29 09:07:48 25 4
gpt4 key购买 nike

假设我有一个包含几百万行的文件,组织如下:

@1:N:0:ABC
XYZ

@1:N:0:ABC
ABC

我正在尝试编写一个单行 grep/sed/awk 匹配函数,如果 NCCGGAGA 返回两行第一行的行在第二行中找到。

当我尝试使用 grep -A1 -P 时并用 '(?<=:)[A-Z]{3}' 之类的匹配项来传递匹配项,我卡住了。我认为我的创造力在这里让我失望了。

最佳答案

使用 awk

$ awk -F: 'NF==1 && $0 ~ s{print p ORS $0} {s=$NF; p=$0}' ip.txt
@1:N:0:ABC
ABC
  • -F: 使用: 作为分隔符,可以轻松获取最后一列
  • s=$NF; p=$0 保存最后一列值和整行以供稍后打印
  • NF==1 如果行不包含 :
  • $0 ~ s 如果行包含先前保存的最后一列数据
    • 如果搜索数据可以包含正则表达式元字符,则使用 index($0,s) 进行字面搜索
  • 请注意,此代码假定输入文件包含包含 : 的行,后跟不包含 :
  • 的行


使用 GNU sed(可能也适用于其他版本,但语法可能不同)

$ sed -nE '/:/{N; /.*:(.*)\n.*\1/p}' ip.txt
@1:N:0:ABC
ABC
  • /:/ 如果行包含 :
  • N 添加下一行到模式空间
  • /.*:(.*)\n.*\1/ 在最后一个 : 之后捕获字符串并检查它是否出现在下一行

再次,这假设输入如问题所示..这不适用于像

这样的情况
@1:N:0:ABC
@1:N:0:XYZ
XYZ

关于regex - 如果第二行包含与第一行相同的匹配项,我如何打印 2 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49728490/

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