私は1つ以上のホームディレクトリを含む/サブディレクトリの数を数える必要があります。たとえば、john、emily、およびrickのホームディレクトリが/home/john、/home/emily、および/var/libにある場合、答えは2です。
CutとGrepを使ってパイプを使う必要があるようですが、どのように正確に使用するのかわかりません。
答え1
(export LC_ALL=C
getent passwd | cut -d: -f6 | sort -t/ -uk2,2 | grep -c ..)
ユーザーホームディレクトリの一意の2番目のコンポーネントの数を計算します。
LC_ALL=C
uniq
通常、私たちが使用するときに必要です。sort -u
getent passwd
アカウントデータベースをcsv(コロンで区切って)として返します(列挙可能であると仮定しますが、ネットワークデータベースの場合は必ずしもそうではありません)。cut -d: -f6
各レコードの6番目のフィールドを抽出する(デフォルトディレクトリ)sort -t/ -uk2,2
2番目のディレクトリコンポーネントをソートし、一意のソートキーごと-u
に1つのレコードのみを保持します。grep -c ..
除外する2つ以上の文字を含む行数を計算します/
(またはgrep -cvx /
:)
+ +単一の呼び出しでcut
置き換え可能:sort
grep
awk
getent passwd | awk -F: '{split($6, p, "/")}
p[2] != "" && !seen[p[2]]++ {n++}
END {print n}'