私のシステムの一意のシェルリストを取得しようとしています。このコマンドを実行するとき:
cat /etc/passwd | cut -d ':' -f 7 | uniq
私は得る:
/bin/bash
/bin/sync
/sbin/shutdown
/sbin/halt
/bin/bash
uniq
なぜ私が望むようにならないのか理解できません。私が理解していないものは何ですか?
この出力を取得してコピーを作成し、/bin/bash
コピーの行の1つを別の行に置き換えてからファイルを試しましたが、diff
出力がないため、隠された文字ではないようです。
答え1
uniq
これは男性が働く方法によるものです。
注:「uniq」は重複行を検出しません。隣接しない異常。最初に入力をソートするか、「uniq」なしで「sort -u」を使用できます。
したがって、使用する方が良いので、以下は必要ありませんcat
。
$ cut -d ':' -f 7 /etc/passwd | sort -u
/bin/bash
/bin/false
/bin/sync
/usr/sbin/nologin
またはコマンド
awk -F: '{ print $7 | "sort -u" }' /etc/passwd
@小さなジャロ提案:
awk -F: '!s[$7]++{print $7}' /etc/passwd
答え2
uniq
これが機能するには、ソートされた出力を渡す必要があります。
$ cat /etc/passwd | cut -d ':' -f 7 | sort | uniq
/bin/bash
/bin/sync
/sbin/halt
/sbin/shutdown