搜索与另一个字符串邻近的字符串?

搜索与另一个字符串邻近的字符串?

假设我想搜索“123456789”,并且希望它靠近“名字”。有办法做到吗?

我有 0 逻辑来做这件事。也许管道 grep 可以工作?

哪种算法最适合此目的?

输入:

search_string1='firstname' search_string2='123456789'
proximity_#_of_lines=10

输出:

查找search_string1search_string2举例说明它们是否有 10 条线彼此靠近。即,如果这两个字符串彼此相邻 10 行,则将其显示到文件中。

答案1

标准方法可能是:

what_we_want='123456789'
context='firstname'
distance=10
grep -E -e "${context}" -C "${distance}" file_to_look_into | grep -E -e "${what_we_want}" -C "${distance}"

第一个grep确保我们只查看匹配线$distance周围的线。然后第二个查看是否在这些行中$context找到。$what_we_want2*$distance+1

如果您只想要匹配的行作为结果,请-C "${distance}"从第 2 个中删除grep

答案2

假设每个字符串在输入中只能出现一次,然后使用任何 awk (未经测试):

#!/usr/bin/env bash

awk -v str1='string1' -v str2='string2' -v prox=10 '
    index($0,str1) { nr1 = NR }
    index($0,str2) { nr2 = NR }
    nr1 && nr2 {
        delta = (nr1 > nr2 ? nr1 - nr2 : nr2 - nr1)
        exit ( delta > prox )
    }
' file

if (( $? == 0 )); then
    printf 'success\n'
else
    printf 'failure\n'
fi

相关内容