Как извлечь строки из исходного файла со ссылочным файлом, добавить в файл результатов?

У меня есть вопрос, и я не могу понять. Это солярис. упрощенные исходные и справочные файлы.

Исходный файл s.txt:

dn: cn=task,cn=Groups,dc=domain changetype: modify add: uniquemember uniquemember: cn=user1,cn=users,dc=domain dn: cn=task,cn=Groups,dc=domain changetype: modify add: uniquemember uniquemember: cn=user9,cn=users,dc=domain dn: cn=task,cn=Groups,dc=domain changetype: modify add: uniquemember uniquemember: cn=user10,cn=users,dc=domain 

Ссылочный файл r.txt:

 uniquemember: cn=user9,cn=users,dc=domain uniquemember: cn=user8,cn=users,dc=domain 

Я хотел бы сценарий для использования файла уникального элемента справочной записи для извлечения строки исходного файла cn = user9 и 3 строки выше, добавить в файл результатов usermember_

add.ldif:

 dn: cn=task,cn=Groups,dc=domain changetype: modify add: uniquemember uniquemember: cn=user9,cn=users,dc=domain 

    2 Solutions collect form web for “Как извлечь строки из исходного файла со ссылочным файлом, добавить в файл результатов?”

    Если вы пытаетесь использовать значения в r.txt качестве ключей для извлечения совпадающих многострочных записей из s.txt , попробуйте

     awk 'NR==FNR {u[$2]++; next} $NF in u' r.txt RS= s.txt 
    • обработать r.txt с r.txt по умолчанию ( r.txt ассоциативный массив u с ключами из второго поля, разделенного пробелами; затем
    • снять разделитель записей RS= для переключения в режим абзаца для второго файла
    • обрабатывать s.txt в режиме абзаца, т.е. обрабатывать каждый блок, разделенный пустой строкой, как одну запись, последнее значение поля $NF затем можно использовать в качестве значения для поиска в u
    • если в вас существует $NF , выведите всю запись

    Чтобы добавить пространство между соответствующими записями:

    Если у вас есть GNU awk ( gawk ), вы можете использовать специальную переменную RT чтобы добавить оригинальные разделители абзацев:

     gawk 'NR==FNR {u[$2]++; next} $NF in u {print $0 RT}' r.txt RS= s.txt 

    В более общем случае вы можете добавить один дополнительный символ новой строки после каждой соответствующей записи:

     awk 'NR==FNR {u[$2]++; next} $NF in u {print $0 "\n"}' r.txt RS= s.txt 

    или добавьте дополнительную новую строку в разделитель поля вывода по умолчанию:

     awk 'NR==FNR {u[$2]++; next} $NF in u' r.txt RS= ORS='\n\n' s.txt 

    Из вашего вопроса я понял, что вы хотели бы использовать код для чтения ключевого слова user в r.txt , а затем искать это ключевое слово в s.txt . Наконец, напечатайте строку, относящуюся к этому ключевому слову (и предыдущие три строки) in s.txt . Вы можете написать эти строки в файле с именем "code" :

     #!/bin/bash if [[ `egrep user9 r.txt` ]] ; then grep -B 3 user9 s.txt fi 

    Дайте этому файлу "code" разрешения, затем запустите его в терминале следующим образом:

     code > add.ldif 

    Выход:

     dn: cn=task,cn=Groups,dc=domain changetype: modify add: uniquemember uniquemember: cn=user9,cn=users,dc=domain 

    Допустим, у вас есть две записи для user9 в s.txt следующим образом:

     dn: cn=task,cn=Groups,dc=domain changetype: modify add: uniquemember uniquemember: cn=user1,cn=users,dc=domain dn: cn=task,cn=Groups,dc=domain changetype: modify add: uniquemember uniquemember: cn=user9,cn=users,dc=domain dn: cn=task,cn=Groups,dc=domain changetype: modify add: uniquemember uniquemember: cn=user18,cn=users,dc=domain dn: cn=XXX,cn=XXX,dc=XXX changetype: XXX add: XXX uniquemember: cn=user9,cn=users,dc=domain 

    Предыдущий код найдет две записи для user9:

     dn: cn=task,cn=Groups,dc=domain changetype: modify add: uniquemember uniquemember: cn=user9,cn=users,dc=domain -- dn: cn=XXX,cn=XXX,dc=XXX changetype: XXX add: XXX uniquemember: cn=user9,cn=users,dc=domain 
    Interesting Posts

    sed inline editing не работает для нескольких операторов sed

    Как я могу запретить умирать скрипту, если идентификатор процесса не существует?

    Двойная загрузка windows / debian, нет меню загрузки?

    Как понять и смягчить удаленные атаки Evil DNS в Linux-системах?

    Разрешить доступ только для чтения user2 к подкаталогу user1

    поделиться существующим сеансом tmux

    Как снять экран сразу после запуска работы (до окончания)?

    Странное поведение `/ proc / self / environment` в некоторых shellх; что здесь происходит?

    Винные места для установки cdrom на Linux Mint 10 (Ubuntu 10.10) – проблемы после установки / переключения дисков

    Создание фиктивного трафика по ссылке OpenVPN

    Как объединить два ключа, чтобы действовать как клавиша FN с помощью xbindkeys?

    Есть ли разница между `;` и `&&` и `|`?

    Запускать скрипт один раз в день с помощью systemd

    Понимание сообщения об ошибке «Аппаратная ошибка из источника ошибки APEI»

    Не удалось подключить шлюзы и другие Linux-боксы в одной сети

    Linux и Unix - лучшая ОС в мире.