Bash 从文件到ldif脚本,属性之间用逗号分隔

Bash 从文件到ldif脚本,属性之间用逗号分隔,bash,awk,ldif,Bash,Awk,Ldif,我有这样一个文件: h3fah055,NG_系统UX,NG_系统FO,NG_系统STG,NG_应用程序DWH h3fah058,NG_系统UX,NG_系统FO,NG_系统STG,NG_应用程序DWH h3fah065,NG_系统UX,NG_系统FO,NG_系统STG,NG_应用程序ERP h3fah066,NG_系统UX,NG_系统FO,NG_系统STG,NG_应用程序ERP h3fah082,NG_系统UX,NG_系统FO,NG_系统STG h3fal029,NG_系统UX,NG_系统FO,N

我有这样一个文件:

h3fah055,NG_系统UX,NG_系统FO,NG_系统STG,NG_应用程序DWH h3fah058,NG_系统UX,NG_系统FO,NG_系统STG,NG_应用程序DWH h3fah065,NG_系统UX,NG_系统FO,NG_系统STG,NG_应用程序ERP h3fah066,NG_系统UX,NG_系统FO,NG_系统STG,NG_应用程序ERP h3fah082,NG_系统UX,NG_系统FO,NG_系统STG h3fal029,NG_系统UX,NG_系统FO,NG_系统STG h3fal030,NG_系统UX,NG_系统FO,NG_系统STG

我想从该文件生成ldif,因此对于我需要生成的每一行:

 dn: cn=h3fah055,ou=hosts,dc=example,dc=com
 objectClass: host
 objectClass: ipHost
 objectClass: top
 ipHostNumber: 1.1.1.1
 cn: h3fah055
 Allowednetgroup: NG_SYS_UX
 Allowednetgroup: NG_SYS_FO
 Allowednetgroup: NG_SYS_STG
 Allowednetgroup: NG_APP_DWH
如何读取此文件中的每一行并将每个网络组(如果存在)保存在一个变量中,以便在文件中打印所需的输出

我试着

while read p; do
  echo $p |  awk -F , '{print "dn: cn=" $1 ",ou=hosts,dc=example,dc=com"}'
done <hosts_list.txt
读取p时
;做
echo$p|awk-F,“{print”dn:cn=“$1”,ou=hosts,dc=example,dc=com”}”

完成这是您可以遵循的模板

awk -F, '{print "cn:",$1; 
          for(i=2;i<=NF;i++) print "Allowednetgroup:",$i}'

您可以自己添加top。

awk有一个变量
NF
,它是行中的字段数。 因此,您可以像这样使用
for
语句循环遍历它们

awk -F',' '{print "dn: cn=" $1 ",ou=hosts,dc=example,dc=com\nobjectClass:host\nobjectclass: ipHost\nobjectClass: top\nipHostNumber 1.1.1.1\ncn:" $1;
    for(i=2;i<=NF;i++) print "Allowednetgroup: " $i  }' hosts_list.txt
awk -F',' '{print "dn: cn=" $1 ",ou=hosts,dc=example,dc=com\nobjectClass:host\nobjectclass: ipHost\nobjectClass: top\nipHostNumber 1.1.1.1\ncn:" $1;
    for(i=2;i<=NF;i++) print "Allowednetgroup: " $i  }' hosts_list.txt
dn: cn=h3fah055,ou=hosts,dc=example,dc=com
objectClass:host
objectclass: ipHost
objectClass: top
ipHostNumber 1.1.1.1
cn:h3fah055
Allowednetgroup: NG_SYS_UX
Allowednetgroup: NG_SYS_FO
Allowednetgroup: NG_SYS_STG
Allowednetgroup: NG_APP_DWH
etc...