【发布时间】:2016-03-17 22:17:02
【问题描述】:
我是 awk 的新手,并试图完成将 ldif 文件转换为 csv 的工作,为此我使用 awk 来解析和转换它。如果属性值中没有任何逗号,则下面的脚本工作正常。但是如果属性值中有逗号,则在 csv 中它会创建一个单独的列。 因此,如果属性值字段包含使用 awk 的逗号,则需要帮助来操作它。 下面是我正在使用的 awk 文件和示例数据。 AWK 脚本:-
#!/bin/awk -f
BEGIN {
uid = ""
omEntitytype = ""
sn = ""
givenName = ""
initials = ""
omUnit = ""
departmentNumber = ""
omCostCenter = ""
title = ""
omManager = ""
omaffiliatedaccount = ""
printf("USERID,USER_TYPE,USER_LASTNAME,USER_FIRSTNAME,USER_INITIAL,USER_UNIT,USER_DEPT,CHARGE_UNIT,USER_JOB_TITLE,SPONSOR_USERID,ACCOUNT_ID\n");
}
/^uid:/ {uid=$2}
/^omEntitytype:/ {omEntitytype=$2}
/^sn:/ {sn=$2}
/^givenName:/ {givenName=$2}
/^initials:/ {initials=$2}
/^omUnit:/ {omUnit=$2}
/^departmentNumber:/ {departmentNumber=$2}
/^omCostCenter:/ {omCostCenter=$2}
/^title:/ {title=$2}
/^omManager:/ {omManager=$2}
/^omaffiliatedaccount:/ {omaffiliatedaccount=$2}
/^dn/{
if(uid != "") printf("%s,%s,%s,,%s,%s,%s,%s,%s,%s,%s,%s\n",uid,omEntitytype,sn,givenName,initials,omUnit,departmentNumber,omCostCenter,title,omManager,omaffiliatedaccount);
uid = ""
omEntitytype = ""
sn = ""
givenName = ""
initials = ""
omUnit = ""
departmentNumber = ""
omCostCenter = ""
title = ""
omManager = ""
omaffiliatedaccount = ""
}
#capture last dn
END{
if(uid != "") printf("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n",uid,omEntitytype,sn,givenName,initials,omUnit,departmentNumber,omCostCenter,title,omManager,omaffiliatedaccount)
}
要传递给它的样本 ldif 数据
dn: uid=sample1,o=people,dc=om,DC=COM
uid: sample1
omEntitytype: Contingent, off-Site
sn: sample1 name1
givenName: sample1
initials: P
omUnit: 07
departmentNumber: 123
omCostCenter: 10
title: Analyst
omaffiliatedaccount: 12345
dn: uid=sample2,o=people,dc=om,DC=COM
uid: sample2
omEntitytype: Contingent, On-Site
sn: sample2 name2
givenName: sample2
initials: P
omUnit: 07
departmentNumber: 123
omCostCenter: 10
title: PLAT MGR, ENGINE,HYD,ELECT,DRIVES
omaffiliatedaccount: 12345
在示例数据中,我遇到了字段 omEntitytype 和标题的问题(填充到 csv 中的新列),因为它们的值是 ','。
任何帮助表示赞赏..在此先感谢。
【问题讨论】:
-
您没有向我们展示预期的输出或告诉我们您希望如何处理数据中的逗号 - 转义它们?引用他们?替换它们?还有什么?编辑您的问题以显示给定输入的预期输出。
标签: awk