0

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

在一个文件中,我有类似于

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

在另一个文件中有几行:

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

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

如果我做类似的事情

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

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

换句话说,输出是:

Барбашев
...

虽然它应该是

Барбашёв
...
4

1 回答 1

1

你的意思是:

“现在。我需要第二个文件中的行,但前提是当您在第二个文件中用 ё 代替 е 时在第一个文件中找不到行。”

代替

“现在。我需要第二个文件中的行,但前提是您在第一个文件中找不到将ё 替换为 е的行。”

对?

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

文件 test.awk

#!/usr/bin/gawk -f

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

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

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

采用:

$ ./test.awk file1 file2

如果您替换“t”->“ё”,这也应该适用于imo。也许你可以试试。

于 2016-12-02T10:11:18.697 回答