단일 명령으로 field7에 있는 파일의 /bin/false 항목 수를 계산하기 위해 awk를 사용하는 데 문제가 있습니다.
grep을 사용해도 문제 없습니다. awk를 사용하여 몇 가지 다른 방법으로 계산을 수행할 수 있습니다. 나는 이것을 가지고있다:
awk '/false/{print NR}' /etc/password
bin/false
그러나 일곱 번째 필드에는 "행 수만" 인쇄되지 않습니다. 어떻게든 7달러를 합쳐야 하는데 도움을 찾을 수 없습니다. 누군가 나에게 올바른 방향을 알려줄 수 있습니까?
daemon:x:2:2:Daemon:/sbin:/bin/bash
ftp:x:40:49:FTP account:/srv/ftp:/bin/bash
daemonuser:x:50:59:nouser/bin/false:/home/nouser:/bin/bash
gdm:x:106:111:Gnome Display Mgr daemon:/var/lib/gdm:/bin/false
haldaemon:x:101:102:User for haldaemon:/var/run/hald:/bin/false
lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash
mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false
root:x:0:0:root:/root:/bin/bash
sshd:x:71:65:SSH daemon:/var/lib/sshd:/bin/false
olivert:x:1001:1003:Tom Oliver:/home/olivert:/bin/csh
smiths:x:1049:1000:Sue Williams:/export/home/smiths:/bin/csh
northj:x:1003:1003:Jim jones-North:/home/northj:/bin/csh
denniss:x:1005:1003:Sue Dennis:/home/denniss:/bin/bash
smitha:x:1050:1001:Amy Smith:/export/home/smitha:/bin/bash
jonesc:x:1053:1001:Cathy Jones:/export/home/jonesc:/bin/ksh
smithd:x:1055:1001:Dan Smith Jr:/export/home/smithd:/bin/csh
답변1
awk -F: '$7 ~ /\/bin\/false/ { print }' /etc/passwd | wc -l
-F:
필드 구분자awk
로 사용하라고 지시합니다.:
$7 ~ /\/bin\/false/
필드 7만 비교됩니다.- 출력을 파이프하여
wc -l
행 수를 계산합니다.
또는 다음을 사용하지 않고 wc -l
:
awk -F: '$7 ~ /\/bin\/false/ { count++ } END {print count}' /etc/passwd
당신은 또한 다음 사항에 관심이 있을 수 있습니다:
$ awk -F: '{ print $7 }' /etc/passwd | sort | uniq -c
38 /bin/bash
79 /bin/false
11 /bin/sh
1 /bin/sync
1 /bin/true
1 /usr/local/bin/ftponly
17 /usr/sbin/nologin