首页 > 解决方案 > 递归地从文件中grep每一行

问题描述

我有一个按字母顺序排序的文件names.txt,其中包含名称:

Dio Brando
Erina Pendleton
Jonathan Joestar
Mario Zeppeli
....

和一个包含文件的文件夹:

a1.txt
a2.txt
....
zn.txt

每个都有Name: phone number. 假设递归按字母顺序遍历文件,我想从每行 grepnames.txt并切换到下一个名称,只要它无法在下一个中找到匹配项。

例如:我用 grep 搜索“Dio Brando”,它到达文件中,比如D2.txt以下几行:

Dio Brando: phone number 1
Dio Brando: phone number 2
Dio Brando: phone number 3
<not Dio Brando>: phone number 1

当我点击 <not Dio Brando> 行时,我希望它开始搜索它停止的“Erina Pendleton”(从D2.txt以后)。保证找到至少一个匹配,然后当它失败时,它应该切换到“Jonathan Joestar”等。没有一些严肃的脚本是否可能?

如果无法使用下一个名称恢复,只需在整个文件夹的每一行上执行 grep 即可。

标签: awkgrep

解决方案


听起来这可能就是您所需要的:

awk '
BEGIN { nameNr = 1 }
NR==FNR {
    names[NR] = $0
    next
}
{
    if ( index($0,names[nameNr]) ) {
        print FILENAME, FNR, $0
        found = 1
    }
    else if ( found ) {
        nameNr++
        found = 0
    }
}
' *.txt

但由于您没有提供示例输入/输出,我们可以用这只是未经测试的猜测进行测试。


推荐阅读