数千行のtxtを行と列に解析します。

数千行のtxtを行と列に解析します。

現在のドキュメントには、何千人ものユーザーの名前、資格情報、役割、権限がリストされています。 .xlsに渡されましたが、行と列が正しい形式でソートされていません。 awkとsedを使用して元のファイルの形式を再指定しましたが、次の一貫した形式の行がたくさんあります。

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

しかし、次の段階で詰まった。

目的:アクセスされたフィールドが複数ある場合(たとえば、行1または行3)、行を再印刷し、アクセスされたフィールドの数に基づいて以前のすべてのフィールドを再印刷し、アクセスされたフィールドを単一の列に並べ替えます。

ID       ;email                     ;role  ;privilege ;access-to
abcuser1 ;[email protected] ;usr   ;read      ;finance
abcuser1 ;[email protected] ;usr   ;read      ;HR
abcuser1 ;[email protected] ;usr   ;read      ;accounting
abcuser1 ;[email protected] ;usr   ;read      ;dev
user2def ;[email protected] ;mgr   ;rwx       ;finance
zyxuser3 ;[email protected] ;usr   ;rx        ;marketing
zyxuser3 ;[email protected] ;usr   ;rx        ;dev
zyxuser3 ;[email protected] ;usr   ;rx        ;publication
.
.
.
n x 1,000 number of users

ベストアンサー1

awk -F';' -v OFS=';' '
    { for (i=5; i<=NF; i++) print $1,$2,$3,$4,$i }
' file

出力

ID       ;email                     ;role  ;privilege ;access-to
8charID1 ;[email protected] ;usr   ;read      ;finance 
8charID1 ;[email protected] ;usr   ;read      ;HR 
8charID1 ;[email protected] ;usr   ;read      ;accounting
8charID1 ;[email protected] ;usr   ;read      ; dev
8charID2 ;[email protected] ;mgr   ;rwx       ;finance
8charID3 ;[email protected] ;usr   ;rx        ;marketing 
8charID3 ;[email protected] ;usr   ;rx        ;dev 
8charID3 ;[email protected] ;usr   ;rx        ;doc

おすすめ記事