Как поместить значения через запятую в новую строку и удалить все идентификаторы перед включением двоеточия - PullRequest
1 голос
/ 21 апреля 2020

Ниже приведен вывод команды из системы 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

Это выше работает отлично, но, глядя на это, все это можно объединить в один, используя tr и cut два раза по-разному.

Предпочтительно awk или sed было бы уместно.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 21 апреля 2020
$ sed 's/.*://; y/,/\n/' file
pxf59093
pxv07744
pxa02374
...

s/.*:// удаляет все, что предшествует последнему двоеточию, и само двоеточие, а y/,/\n/ делает то, что tr делает в вашем подходе.

3 голосов
/ 21 апреля 2020

В awk не могли бы вы попробовать следующее.

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

2-е решение:

awk '{sub(/.*:/,"");gsub(/,/,ORS)} 1'  Input_file
2 голосов
/ 21 апреля 2020

Это может работать для вас (GNU sed):

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

Перевести , на новые строки и не печатать ни одной строки с : в нем.

NB Решение от @oguz ismail является более эффективным и быстрым (в отношении решения sed).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...