#bash #comm
#bash #comm
Вопрос:
У меня есть два текстовых файла, каждый из которых содержит по одному слову в строке. Для справки, первый файл содержит ограниченный список уникальных слов, а второй файл — более длинный файл со многими словами, многие из которых являются повторяющимися.
Моя цель — сохранить все слова во втором файле, которые существуют в первом файле (список слов), и удалить все остальные. Слова в списке слов отсортированы, но проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы слова во втором файле были в том порядке, в котором они находятся, то есть в несортированном. Насколько я знаю, это не позволяет использовать команду ‘comm’, которая, по-видимому, требует отсортированных списков для поиска столкновений между двумя файлами.
Есть ли другая утилита, которую я могу использовать, которая позволяет мне достичь своих целей, или есть способ использовать comm для фактического вывода совместных слов в том порядке, в котором они отображаются во втором файле?
Ответ №1:
Есть ли другая утилита, которую я могу использовать, которая позволяет мне достичь своих целей
Да, существует бесконечное количество языков программирования и утилит. Обычно в среде Linux можно написать awk
скрипт.
есть ли способ использовать comm для фактического вывода совместных слов в том порядке, в котором они отображаются во втором файле?
Нет. Но есть join
и другое: вы можете нумеровать строки nl -w1
файла, порядок которых хотите сохранить, затем sort
во втором поле, затем join -o1.1,1.2
во втором поле с отсортированным другим файлом, затем повторно sort
ввести номера строк и удалить номера строк — из cut
-за номеров строк сохраняется исходный порядок строк.