Как скопировать строки из одного файла в другой с сохранением повторяющихся значений
В этой статье мы рассмотрим, как можно эффективно сравнить два текстовых файла и скопировать строки из одного файла в другой, сохраняя при этом дублирующиеся строки. Мы проанализируем конкретный пример с файлами 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-подобных системах, что делает его универсальным инструментом для работы с файлами. Подобные задачи часто встречаются при обработке данных, и знание таких методов значительно упростит вашу работу.