Поиск идентичных строк в одном отсортированном и одном несортированном текстовом файле, сохранение порядка в несортированном файле

#bash #comm

#bash #comm

Вопрос:

У меня есть два текстовых файла, каждый из которых содержит по одному слову в строке. Для справки, первый файл содержит ограниченный список уникальных слов, а второй файл — более длинный файл со многими словами, многие из которых являются повторяющимися.

Моя цель — сохранить все слова во втором файле, которые существуют в первом файле (список слов), и удалить все остальные. Слова в списке слов отсортированы, но проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы слова во втором файле были в том порядке, в котором они находятся, то есть в несортированном. Насколько я знаю, это не позволяет использовать команду ‘comm’, которая, по-видимому, требует отсортированных списков для поиска столкновений между двумя файлами.

Есть ли другая утилита, которую я могу использовать, которая позволяет мне достичь своих целей, или есть способ использовать comm для фактического вывода совместных слов в том порядке, в котором они отображаются во втором файле?

Ответ №1:

Есть ли другая утилита, которую я могу использовать, которая позволяет мне достичь своих целей

Да, существует бесконечное количество языков программирования и утилит. Обычно в среде Linux можно написать awk скрипт.

есть ли способ использовать comm для фактического вывода совместных слов в том порядке, в котором они отображаются во втором файле?

Нет. Но есть join и другое: вы можете нумеровать строки nl -w1 файла, порядок которых хотите сохранить, затем sort во втором поле, затем join -o1.1,1.2 во втором поле с отсортированным другим файлом, затем повторно sort ввести номера строк и удалить номера строк — из cut -за номеров строк сохраняется исходный порядок строк.