コロンで区切られたファイルを別のファイルに出力します。

コロンで区切られたファイルを別のファイルに出力します。

次のサンプルファイルがあります。

root:server1:2014-12-12:x:Open:adm bin daemon lp mail other root sys users
sectmp:server1:2014-12-12:x:Open:users
smbnull:server1:2014-12-12:x:Locked:ids
sav:server1:2014-12-12:x:Locked:sav users
sshd:server1:2014-12-12:x:Locked:sshd
sys:server1:2014-12-12:x:Locked:sys
systemp:server1:2014-12-12:x:Open:bin sys users

複数のグループに属する各ログインアカウントを別々の行に配置する新しいファイルを作成したいと思います。たとえば、次のようになります。

root:server1:2014-12-12:x:Open:adm 
root:server1:2014-12-12:x:Open:bin 
root:server1:2014-12-12:x:Open:daemon 
root:server1:2014-12-12:x:Open:lp 
root:server1:2014-12-12:x:Open:mail 
root:server1:2014-12-12:x:Open:other 
root:server1:2014-12-12:x:Open:root 
root:server1:2014-12-12:x:Open:sys 
root:server1:2014-12-12:x:Open:users
sectmp:server1:2014-12-12:x:Open:users
smbnull:server1:2014-12-12:x:Locked:ids
sav:server1:2014-12-12:x:Locked:sav 
sav:server1:2014-12-12:x:Locked:users
sshd:server1:2014-12-12:x:Locked:sshd
sys:server1:2014-12-12:x:Locked:sys
systemp:server1:2014-12-12:x:Open:bin 
systemp:server1:2014-12-12:x:Open:sys 
systemp:server1:2014-12-12:x:Open:users

ベストアンサー1

これは以下を使用して行うことができますawk

awk -F: -v OFS=: '{split ($NF, groups, " "); $NF=""; for (i in groups) {printf "%s%s\n", $0, groups[i]}}'

フィールド(in $NF="")に割り当てると、$0そのインスタンスがFSに置き換えられるため、にOFS割り当てる必要があります。出力順序を期待しないでください。グループフィールドはランダムに出力されます。後で必要に応じてご利用ください。:OFSsort

おすすめ記事