Сравните два файла линию за линией и покажите единственную разницу из файла 2

Я хочу сравнить два файла линию за линией, не сортируя и показать единственную разницу от file2.

файл 1.txt:

one
two
three
four
five
six
seven
eight
nine
ten

файл 2.txt:

one
five
three
four
five
twelve
seven
eight
hundred
ten

Затем вывод должен быть

five 
twelve
hundred

Я не хочу сортировать файлы.

3
задан 29 September 2018 в 08:22

3 ответа

Вы также можете использовать diff для этой задачи:

diff --old-line-format="" --unchanged-line-format="" 1.txt 2.txt 

Дает следующий вывод:

five
twelve
hundred
4
ответ дан 1 December 2019 в 13:14

Вы не можете сделать это без сортировки ваших данных. Даже если вы никогда явно не запускаете команду sort, любое решение будет , включающее в себя индексацию или сортировку данных и отнимание O (n) времени или памяти, чтобы сделать это. Например, решение, которое просматривает файлы и отслеживает, какие строки видны или не видны, займет O (n) памяти, а решение, которое сортирует файлы в первую очередь, займет O (n) времени.

0
ответ дан 1 December 2019 в 13:14

Выполнение линию за линией использования сравнения awk, Вы могли сделать:

awk '{ getline x<"file2" } $0!=x{ print x}' file1
  • getline x<"file2" читает всю строку из file2 и содержит в x переменную.
  • print x когда строка от file1 не соглашается со строкой в file2.

Или то же, но короче:

awk '{ getline x<"file1" } $0!=x' file2
4
ответ дан 1 December 2019 в 13:14

Другие вопросы по тегам:

Похожие вопросы: