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

时间:2016-12-02 09:25:11

标签: bash comm

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

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

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

在另一个文件中有行:

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

现在。我需要第二个文件中的行,但只有当你在第一个用ё代替ё时才能找到一行。例如,Барбашёв不应显示,因为Барбашев位于第一个。

如果我做的话

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

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

换句话说,输出是:

Барбашев
...

虽然应该

Барбашёв
...

1 个答案:

答案 0 :(得分:1)

你的意思是:

“现在。我需要第二个文件中的行,但是只有当你在第二个文件中用ё代替е时才能在第一个中找不到行。”

而不是

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

右?

不使用cyrilic字符集,此解决方案有效:

file 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” - &gt; “ё”这也应该工作imo。也许你可以试试。