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

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

Исходный файл 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

linux + fstab + cifs

awk принимает имена файлов вместо файлов в цикле

Пустой экран после выхода из XFCE

Хостинг нескольких веб-сайтов в Webmin

pthread в реальном времени, созданный из потока, отличного от реального времени, с помощью init.d

Каков эффект установки неизменяемого раздела бит / загрузки

Как переместить файлы в подкаталоги по счету?

wpa_supplicant не может установить essid и другие параметры из файла конфигурации

Есть ли встроенный (или, по крайней мере, простой) способ проверить наличие функции, доступной через $ FPATH?

Добавление www-данных в / etc / sudoers dos не работает для PHP shell_exec () для запуска команды

Решение для Frozen Lock Screen: Linux Mint Cinnamon 18

Lynx пытается распаковать мои загрузки

Как изменить эти правила iptables, чтобы связать HTTP-трафик с моим VPN-соединением?

mount.cifs дает разрешение на отказ от отказа

Действительно ли tar сжимает файлы или просто группирует их вместе?

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