如何在一个文件中打印与另一个文件中的行不匹配的行*转换后*

How to print lines in one file that do not match lines in another *after transformation*

请注意,我了解如何在一个文件中输出不在另一个文件中的行 (here),我的问题有点不同。

在一个文件中我有类似于

的行
Андреев
Барбашев
Иванов
...

在不同的文件中有行:

Барбашёв
Семёнов
...

现在。我需要第二个文件中的行,但前提是您在第一个文件中找不到用 ё 代替 е 的行。例如Барбашёв不应该显示,因为Барбашев在第一个。

如果我做类似的事情

comm -13 first.txt <(cat second.txt | sed 's/ё/е/g')

我得到了正确的台词,但是,到那时它们已经被转换了,这对于我正在尝试做的事情来说是不可接受的。

换句话说输出是:

Барбашев
...

虽然应该

Барбашёв
...

你的意思是:

"Now. I need the lines from the second file, but only if you cannot find a line in the first when you substitute ё for е in the second file."

而不是

"Now. I need the lines from the second file, but only if you cannot find a line in the first where you substitute ё for е."

对吗?

在不使用西里尔字符集的情况下,此解决方案有效:

文件test.awk

#!/usr/bin/gawk -f

{
    if(NR==FNR)
        arr[]++;
    else {

        tmp=;
        gsub("t","e",tmp)

        if(!(tmp in arr))
            printf("%s\n", );
    }
}

使用:

$ ./test.awk file1 file2

如果您替换为 "t" -> "ё",我认为这也应该有效。也许你可以试试。