Как использовать Grep для сохранения дублированных строк в файл TXT

Как скопировать строки из одного файла в другой с сохранением повторяющихся значений

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

Пояснение команды

  1. while read: Читает строки из File1.txt.
  2. grep -wF "$REPLY" File2.txt: Выполняет поиск строки, считанной из File1.txt, в File2.txt, и выводит результат.
  3. done < File1.txt > File3.txt: Записывает все результаты в File3.txt.

Заключение

Используя предложенный подход, вы можете легко извлекать необходимые строки из одного файла на основе содержимого другого, при этом сохраняя дублирующиеся записи. Этот метод подходит для текстового поиска и манипуляций в Unix-подобных системах, что делает его универсальным инструментом для работы с файлами. Подобные задачи часто встречаются при обработке данных, и знание таких методов значительно упростит вашу работу.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *