"1"로 시작하는 그룹과 해당 숫자를 인쇄하는 한 줄 프로그램이 있습니까?

"1"로 시작하는 그룹과 해당 숫자를 인쇄하는 한 줄 프로그램이 있습니까?

식별자가 "1"로 시작하는 모든 그룹에 대해 시스템 그룹과 해당 식별자를 인쇄하는 한 줄 프로그램을 작성해야 합니다. 예를 들어, cat명령의 결과 /etc/group는 다음과 같습니다.

인쇄해야 합니다:

users 100 
libuuid 101 
netdev 102 
crontab 103
........
penny 1002 
leonard 1003 
sheldon 1004

답변1

AWK이를 사용하면 이 작업을 보다 효율적으로 수행 할 수 있습니다 .

$ awk -F: '$3 ~ /^1/ {print $1, $3}' /etc/group
daemon 1
uucp 10
man 12
proxy 13
kmem 15
users 100
libuuid 101
crontab 102
fuse 103
avahi-autoipd 104
scanner 105
messagebus 106
colord 107

답변2

1로 시작하는 그룹의 일관된 패턴과 해당 그룹 번호가 보이시나요?

$ head -20 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:logcheck
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:saml
cdrom:x:11:
mail:x:12:
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:30:
video:x:39:
ftp:x:50:

즉시 떠오르는 패턴 중 하나는 모든 그룹 번호 앞에 콜론이 붙는다는 것입니다 :. :1예를 들어 다음을 포함하는 행을 찾을 수 있습니다.

파일에서 패턴을 찾는 것에 대해 이야기하고 있으므로 이 도구가 즉시 떠오를 것입니다 grep. 이 도구는 패턴을 찾은 다음 해당 패턴이 포함된 해당 줄을 인쇄합니다.

따라서 우리가 알고 있는 비트를 조립하면 다음과 같습니다.

$ grep ":1" /etc/group
bin:x:1:
wheel:x:10:saml
cdrom:x:11:
mail:x:12:
man:x:15:
dialout:x:18:
floppy:x:19:
users:x:100:
systemd-journal:x:190:
systemd-journal-gateway:x:191:
usbmuxd:x:113:
qemu:x:107:
rtkit:x:172:
abrt:x:173:
avahi-autoipd:x:170:
oprofile:x:16:
mock:x:135:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:

형식화된 출력

다음 요구 사항을 준수하도록 위 출력의 형식을 지정해야 하는 경우:

user 123

sed그런 다음 다음을 사용하여 청소할 수 있습니다 .

$ grep ":1" /etc/group | sed 's/:\(x:\)*/ /g' | head -5
bin 1 
wheel 10 saml
cdrom 11 
mail 12 
man 15 

head명령은 여기서 출력을 5줄로 제한합니다.

관련 정보