![将具有不同标题的文本文件重新排列为 csv](https://linux22.com/image/190007/%E5%B0%86%E5%85%B7%E6%9C%89%E4%B8%8D%E5%90%8C%E6%A0%87%E9%A2%98%E7%9A%84%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E9%87%8D%E6%96%B0%E6%8E%92%E5%88%97%E4%B8%BA%20csv.png)
我在 Linux 机器上有一个这样的文件:
dn: cn=333-MMMM-PPPP_DET1,ou=groups,ou=functional,o=company
member: cn=aaa,ou=users,ou=accounts,o=company
member: cn=bbb,ou=users,ou=accounts,o=company
member: cn=ccc,ou=users,ou=accounts,o=company
member: cn=ddd,ou=users,ou=accounts,o=company
member: cn=eee,ou=users,ou=accounts,o=company
dn: cn=333-MMMM-PPPP_DET2,ou=groups,ou=functional,o=company
dn: cn=333-MMMM-PPPP_DET3,ou=groups,ou=functional,o=company
member: cn=aaa,ou=users,ou=accounts,o=company
member: cn=ggg,ou=users,ou=accounts,o=company
我想将其转换为一个简单格式的 csv,以便在进一步的应用程序中导入:
aaa;333-MMMM-PPPP_DET1
bbb;333-MMMM-PPPP_DET1
ccc;333-MMMM-PPPP_DET1
ddd;333-MMMM-PPPP_DET1
eee;333-MMMM-PPPP_DET1
aaa;333-MMMM-PPPP_DET3
ggg;333-MMMM-PPPP_DET3
我已经尝试过:
awk '1;/^$/{exit}
-> 显示所有行,直到第一次中断(计划是打印它们,将其移动到另一个文件,然后删除它们。在一个循环中。
awk 'FNR == 1 {suffix=$0} {print $0suffix}'
-> 取出第一行并将其放在所有其他行的末尾线。
我没有找到解决这个问题的方法。有什么建议么?
答案1
$ awk -F'[,=]' -v OFS=',' '/^dn/{dn=$2} /^me/{print $2, dn}' file
aaa,333-MMMM-PPPP_DET1
bbb,333-MMMM-PPPP_DET1
ccc,333-MMMM-PPPP_DET1
ddd,333-MMMM-PPPP_DET1
eee,333-MMMM-PPPP_DET1
aaa,333-MMMM-PPPP_DET3
ggg,333-MMMM-PPPP_DET3