Как скопировать строки из одного файла в другой с сохранением повторяющихся значений
В этой статье мы рассмотрим, как можно эффективно сравнить два текстовых файла и скопировать строки из одного файла в другой, сохраняя при этом дублирующиеся строки. Мы проанализируем конкретный пример с файлами File1.txt и File2.txt, а также предложим решение для получения желаемого результата.
Описание задачи
Предположим, у нас есть два файла:
- File1.txt — содержит список животных, в котором некоторые записи повторяются.
- File2.txt — содержит животных с соответствующими путями к файлам.
Наша цель состоит в том, чтобы на основе содержимого File1.txt скопировать соответствующие строки из File2.txt в новый файл File3.txt, при этом сохраняя дублирующиеся строки.
Пример содержимого файлов
Вот как выглядит содержимое файлов:
File1.txt
dog
dog
cat
cat
cat
mouse
snake
fish
File2.txt
horse d:\horse.fbx
lion d:\lion.fbx
monkey d:\monkey.fbx
dog d:\dog.fbx
cat d:\cat.fbx
Исходный вывод
На данный момент, если применить следующую команду:
grep -wF -f File1.txt File2.txt > File3.txt
мы получим в результате File3.txt:
dog d:\dog.fbx
cat d:\cat.fbx
Тем не менее, этот вывод не содержит дублирующихся строк, что не соответствует нашим требованиям.
Желаемый результат
Желаемым результатом для File3.txt должны быть все строки из File2.txt, соответствующие строкам из File1.txt, причем количество строк должно соответствовать количеству дублирующихся записей:
dog d:\dog.fbx
dog d:\dog.fbx
cat d:\cat.fbx
cat d:\cat.fbx
cat d:\cat.fbx
Решение с Bash
Чтобы достичь этого результата, можно воспользоваться циклом while в bash. Вот пример команды, которая решает поставленную задачу:
while read; do grep -wF "$REPLY" File2.txt; done < File1.txt > File3.txt
Пояснение команды
while read: Читает строки изFile1.txt.grep -wF "$REPLY" File2.txt: Выполняет поиск строки, считанной изFile1.txt, вFile2.txt, и выводит результат.done < File1.txt > File3.txt: Записывает все результаты вFile3.txt.
Заключение
Используя предложенный подход, вы можете легко извлекать необходимые строки из одного файла на основе содержимого другого, при этом сохраняя дублирующиеся записи. Этот метод подходит для текстового поиска и манипуляций в Unix-подобных системах, что делает его универсальным инструментом для работы с файлами. Подобные задачи часто встречаются при обработке данных, и знание таких методов значительно упростит вашу работу.



