Text-Processing

將幾千行txt解析成行列

  • November 7, 2014

手頭的文件列出了數千名使用者的姓名、憑據、角色和權限。它以 .xls 的形式傳遞給我,但行和列的排列方式不正確。我已經使用 awk 和 sed 重新格式化了原始文件,現在我有許多行格式一致:

ID       ;email                     ;role  ;privilege ;access-to
8charID1 ;first.lastname@domain.org ;usr   ;read      ;finance ;HR ;accounting; dev
8charID2 ;first.lastname@domain.org ;mgr   ;rwx       ;finance
8charID3 ;first.lastname@domain.org ;usr   ;rx        ;marketing ;dev ;doc
.
.
n x 1,000 number of users

但我被困在下一步。

目標:重新列印這些行,以便在有多個訪問欄位(如第 1 行或第 3 行)的情況下,按照訪問欄位的數量重新列印所有前面的欄位,並將訪問欄位重新排序到單個列中。

ID       ;email                     ;role  ;privilege ;access-to
abcuser1 ;first.lastname@domain.org ;usr   ;read      ;finance
abcuser1 ;first.lastname@domain.org ;usr   ;read      ;HR
abcuser1 ;first.lastname@domain.org ;usr   ;read      ;accounting
abcuser1 ;first.lastname@domain.org ;usr   ;read      ;dev
user2def ;first.lastname@domain.org ;mgr   ;rwx       ;finance
zyxuser3 ;first.lastname@domain.org ;usr   ;rx        ;marketing
zyxuser3 ;first.lastname@domain.org ;usr   ;rx        ;dev
zyxuser3 ;first.lastname@domain.org ;usr   ;rx        ;publication
.
.
.
n x 1,000 number of users
awk -F';' -v OFS=';' '
   { for (i=5; i<=NF; i++) print $1,$2,$3,$4,$i }
' file

輸出

ID       ;email                     ;role  ;privilege ;access-to
8charID1 ;first.lastname@domain.org ;usr   ;read      ;finance 
8charID1 ;first.lastname@domain.org ;usr   ;read      ;HR 
8charID1 ;first.lastname@domain.org ;usr   ;read      ;accounting
8charID1 ;first.lastname@domain.org ;usr   ;read      ; dev
8charID2 ;first.lastname@domain.org ;mgr   ;rwx       ;finance
8charID3 ;first.lastname@domain.org ;usr   ;rx        ;marketing 
8charID3 ;first.lastname@domain.org ;usr   ;rx        ;dev 
8charID3 ;first.lastname@domain.org ;usr   ;rx        ;doc

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