Shell-Script

將具有不同標題的文本文件重新排列到 csv

  • April 19, 2021

我在 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}'> 取第一行並將其放在所有其他行的末尾線。

我沒有找到解決這個問題的方法。有什麼建議麼?

$ 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

引用自:https://unix.stackexchange.com/questions/645818