2016-12-02 7 views
0

Обратите внимание, что я понимаю, как выводить строки в одном файле, которые не находятся в другом (here), мой вопрос немного отличается.Как печатать строки в одном файле, которые не соответствуют строкам в другом * после преобразования *

В одном файле я есть линии сродни

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

в другом файле есть строки:

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

Сейчас. Мне нужны строки из второго файла, но только если вы не можете найти строку в первой, где вы подставляете ё для е. Например, Барбашёв не должен отображаться, потому что Барбашев находится в первом.

Если я сделать что-то вроде

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

я получить правильные линии, однако, они уже tranformed к тому времени, и это неприемлемо для того, что я пытаюсь сделать.

Другими словами, выход:

Барбашев 
... 

Хотя это должно быть

Барбашёв 
... 
+0

Что значит, что они уже преобразованы, пожалуйста, напишите полный ожидаемый результат. – 123

+0

@ 123 Извините, я думал, что это достаточно ясно. Но я добавил ожидаемый результат. – v010dya

+0

'comm' работает с отсортированными файлами. Вы пытались сортировать оба файла перед использованием 'comm'? Вы ничего не должны менять. – GMichael

ответ

1

Вы имели в виду:.

«Сейчас мне нужны строки из второго файла, но только если вы не можете найти строку в первом , когда вы подставляете ё для е во второй файл. "

вместо

«Теперь. Мне нужны строки из второго файла, но только если вы не можете найти строку в первой где вы заменить ё на е

Справа?

Без использования cyrilic кодовую, это решение работает:

файл 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 

Если заменить "т" -> "ё" это также должен работать imo. Может быть, вы можете попробовать.

+0

С некоторыми незначительными трюками это сработало. – v010dya

 Смежные вопросы

  • Нет связанных вопросов^_^