Просто используйте строку формата для внешнего вызоваdate
:
$ date -d "-$(date +%d) days +1 month" +%d
31
Если вы пытаетесь использовать значения в r.txt
как ключи для извлечения совпадающих многострочных -записей из s.txt
, попробуйте
awk 'NR==FNR {u[$2]++; next} $NF in u' r.txt RS= s.txt
r.txt
с разделителем записей по умолчанию (новой строки ), построение ассоциативного массива u
с ключами из второго поля, разделенного пробелами -; затем RS=
для переключения в режим абзаца для второго файла s.txt
в режиме абзаца, т.е. обработка каждой пустой -строки -разделенного блока как единой записи, последнее значение поля которой $NF
может затем использоваться в качестве значения поиска вu
$NF
существует в u
, вывести всю запись Чтобы добавить пробел между совпавшими записями:
Если у вас есть 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