在AWK的帮助下生成Ldif(无法解析输入文件)

时间:2013-07-31 01:58:47

标签: file list parsing awk ldif

我需要根据10k记录列表在ldap上添加一系列条目。我有以下代码:

awk -v uid=999905284 '
{
print "dn: uid="$0",ou=aaa,ou=bbb,dc=br\n
uid: "$0"\n
sn: "$0"\n
cn: "$0"\n
mail: "$0"@grupos.a.br\n
description: "$0"\n
phpgwAccountType: l\n
phpgwAccountStatus: A\n
uidNumber: "uid++"\n
gidNumber: 0\n
deliveryMode: forwardOnly\n
accountStatus: active\n
defaultMemberModeration: 1\n"
}' list

列表的输入如下:

list-a
list-b
...
list-n

预期输出样本:

dn: uid=list-a,ou=aaa,ou=bbb,dc=br\n
uid: list-a
sn: list-a
cn: list-a
mail: list-a@grupos.a.br
description: list-a
phpgwAccountType: l
phpgwAccountStatus: A
uidNumber: 999905284
gidNumber: 0
deliveryMode: forwardOnly
accountStatus: active
defaultMemberModeration: 1


dn: uid=list-b,ou=aaa,ou=bbb,dc=br\n
uid: list-b
sn: list-b
cn: list-b
mail: list-b@grupos.a.br
description: list-b
phpgwAccountType: l
phpgwAccountStatus: A
uidNumber: 999905285
gidNumber: 0
deliveryMode: forwardOnly
accountStatus: active
defaultMemberModeration: 1

我希望输出一个输出,其中$ 0将被列表名称替换,但是它不起作用。

提前致谢!

1 个答案:

答案 0 :(得分:2)

awk不允许您将引用的字符串拆分为两行,除非您通过在末尾添加\将每一行标记为续行。由于您已经明确地在输出中包含\n,因此您可以通过将连续标记放在引用的字符串被拆分的任何地方来解决问题:

awk -v uid=999905284 '
{
print "dn: uid="$0",ou=aaa,ou=bbb,dc=br\n\
uid: "$0"\n\
sn: "$0"\n\
cn: "$0"\n\
mail: "$0"@grupos.a.br\n\
description: "$0"\n\
phpgwAccountType: l\n\
phpgwAccountStatus: A\n\
uidNumber: "uid++"\n\
gidNumber: 0\n\
deliveryMode: forwardOnly\n\
accountStatus: active\n\
defaultMemberModeration: 1\n"
}' list