如何将逗号分隔的值放入换行符并在包含冒号之前删除所有 id



我有来自Linux系统的以下命令输出,它通过逗号分隔的方式获取我想要放入换行符中的所有帐户名,因此删除所有命令并将单个帐户名放入换行符。

$ getent group pi_infra
pi_infra:*:5899:pxf59093,pxv07744,pxa02374,pxa07513,pxa08599,pxa11102,pxa30995,pxa34158,pxf07822,pxf29346,pxf30902,pxf31604,pxf31606,pxf31953,pxf34985,pxf41740,pxf41778,pxf43236,pxf43917,pxf45518,pxf46461,pxf49051,pxf58440,pxf58523,pxf58621,pxf60794,pxf60938,pxf61299,pxf63061,pxp08000,pxp25916,pxp42841,pxp68003,pxp69833,pxp87972
$ cat pi_in| sed 's/,/n/g'
$ cat pi_in| tr ',' 'n'

以上结果。

pi_infra:*:5899:pxf59093
pxv07744
pxa02374
pxa07513
pxa08599
pxa11102
pxa30995
pxa34158
pxf07822
pxf29346
pxf30902
pxf31604
pxf31606
pxf31953
pxf34985
pxf41740
pxf41778
pxf43236
pxf43917
pxf45518
pxf46461
pxf49051
pxf58440
pxf58523
pxf58621
pxf60794
pxf60938
pxf61299
pxf63061
pxp08000
pxp25916
pxp42841
pxp68003
pxp69833
pxp87972

由于我想删除:之前的所有内容,并且只想打印ID,因此我选择使用以下内容。

$ cat pi_in| cut -d":" -f4 | tr ',' 'n'
pxf59093
pxv07744
pxa02374
pxa07513
pxa08599
pxa11102
pxa30995
pxa34158
pxf07822
pxf29346
pxf30902
pxf31604
pxf31606
pxf31953
pxf34985
pxf41740
pxf41778
pxf43236
pxf43917
pxf45518
pxf46461
pxf49051
pxf58440
pxf58523
pxf58621
pxf60794
pxf60938
pxf61299
pxf63061
pxp08000
pxp25916
pxp42841
pxp68003
pxp69833
pxp87972

上面的工作原理很好,但看起来这一切都可以集成为一个,而不是使用trcut两次。

优选地,CCD_ 4或CCD_。

谢谢。

awk中,您可以尝试以下操作吗。

awk -F':' '{gsub(",",ORS,$4);print $4}'  Input_file

第二个解决方案:

awk '{sub(/.*:/,"");gsub(/,/,ORS)} 1'  Input_file
$ sed 's/.*://; y/,/n/' file
pxf59093
pxv07744
pxa02374
...

s/.*://删除最后一个冒号之前的所有内容,以及冒号本身,y/,/n/执行tr在方法中执行的操作。

这可能对你有用(GNU sed(:

sed 'y/,/n/;/:/!P;D' file

,的转换为换行符,不要打印任何包含:的行。

注意:@oguz-ismail的解决方案更高效、更快(相对于sed解决方案(。

最新更新