如何在一个文件中打印与另一个文件中的行不匹配的行*转换后*
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" -> "ё",我认为这也应该有效。也许你可以试试。
请注意,我了解如何在一个文件中输出不在另一个文件中的行 (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" -> "ё",我认为这也应该有效。也许你可以试试。