awkを使用して、単一のコマンドでfield7のファイル内の/ bin / falseエントリの数を計算します。

awkを使用して、単一のコマンドでfield7のファイル内の/ bin / falseエントリの数を計算します。

単一のコマンドでfield7内のファイルの/ bin / falseエントリの数を計算するためにawkを使用するのに問題があります。

grepを使っても問題ありません。 awkを使用して、いくつかの異なる方法で計算を実行できます。私はこれを持っています:

awk '/false/{print NR}' /etc/password  

bin/falseただし、7番目のフィールドには「行数のみ」は印刷されません。どういうわけか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

関連情報