現在のドキュメントには、何千人ものユーザーの名前、資格情報、役割、権限がリストされています。 .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