Я хочу сравнить два файла линию за линией, не сортируя и показать единственную разницу от 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
Я не хочу сортировать файлы.
Вы также можете использовать diff
для этой задачи:
diff --old-line-format="" --unchanged-line-format="" 1.txt 2.txt
Дает следующий вывод:
five
twelve
hundred
Вы не можете сделать это без сортировки ваших данных. Даже если вы никогда явно не запускаете команду sort
, любое решение будет , включающее в себя индексацию или сортировку данных и отнимание O (n) времени или памяти, чтобы сделать это. Например, решение, которое просматривает файлы и отслеживает, какие строки видны или не видны, займет O (n) памяти, а решение, которое сортирует файлы в первую очередь, займет O (n) времени.
Выполнение линию за линией использования сравнения 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