Shell或Perl脚本/如何在/ etc / group中对组成员进行排序?

时间:2014-09-30 10:11:35

标签: perl shell

在/ etc / group文件中对组成员进行排序的最佳方法是什么?

e.g。

tomcat::201:root,tux23,alex
ftp::66000:tom,alex,mike

我需要以下输出:

tomcat::201:alex,root,tux23
ftp::66000:alex,mike,tom

提前致谢, TUX

4 个答案:

答案 0 :(得分:2)

您可以使用perl one liner对每行的用户名进行排序,

perl -pe 's|([^:\n]+)$| join ",", sort split /,/, $1 |e' /etc/group

输出

tomcat::201:alex,root,tux23
ftp::66000:alex,mike,tom

答案 1 :(得分:0)

以下是基于awk的解决方案:

awk -F: '{ split($4, a, ","); 
           n = asort(a);
           s = a[1]; 
           for(i = 2; i <= n; ++i) { s = s "," a[i] }
           print $1":"$2":"$3":"s
         }' /etc/group

答案 2 :(得分:0)

另一个Perl单行:

perl -F: -lape 's#$F[3]#join ",",sort split /,/,$F[3]#e' /etc/group

perl -F: -lane 'print join ":",@F[0..2],join ",",sort split /,/,$F[3]' /etc/group

答案 3 :(得分:0)

另一个perl one liner:

perl -ne 'if (/(.*:\d+:)(.*)/) {print $1.join(",",sort(split(/,/,$2)))."\n";}' /etc/group