
cut
このコマンドを使用してファイルからユーザー名とログインシェルのリストを抽出するにはどうすればよいですか/etc/passwd
?ここで作成されたユーザー名とログインシェルは単一のスペースで区切られます。
ログインシェルをプライマリキー、ユーザー名をセカンダリキーとして使用して、結果のリストをアルファベットの昇順でソートします。新しく作成したファイルに結果を保存します~/usershells.txt
。
私が試したコマンドは次のとおりです。
cut -d /etc/passwd -k7 -k1 | sort > ~/usershells.txt
答え1
cut -f 1,7 -d: /etc/passwd | tr ":" " " | sort -k 2,2d -k 1,1d
次に、事前ソートを使用してフィールド2をプライマリキーに、フィールド1をセカンダリキーでソートします。
列を切り替えるにはawkを使用してください。
cut -f 1,7 -d: /etc/passwd | tr ":" " " | sort -k 2,2d -k 1,1d | awk '{print $2,$1}'
次のようにするには、awkを使用することをお勧めします。
awk -F ":" '{print $7,$1}' /etc/passwd | sort -k 2,2d -k 1,1d
これはカットを使用しませんが、カットの使用に関する要件がどれほど難しいかわかりません。
awkをまったく使用したくない場合でも、列の順序を変更できます。
以下は、whileループを使用して読み取る例です。
cut -f 1,7 -d: /etc/passwd | tr ":" " " | sort -k 2,2d -k 1,1d | while read -r c1 c2;do echo "$c2 $c1";done
切り取りと貼り付けを使用する別のオプション:
paste <(cut -f7 -d: /etc/passwd) <(cut -f1 -d: /etc/passwd) | sort -k 2,2d -k 1,1d
または単一のスペースが必要な場合:
paste -d " " <(cut -f7 -d: /etc/passwd) <(cut -f1 -d: /etc/passwd) | sort -k 2,2d -k 1,1d
> ~/usershells.txt を使用して、リストされたオプションをファイルにリダイレクトします。
もちろん、切り取りと貼り付けを使用して元の順序を維持し、シェルで並べ替えることもできます。
paste -d " " <(cut -f1 -d: /etc/passwd) <(cut -f7 -d: /etc/passwd) | sort -k 2,2d -k 1,1d > ~/usershells.txt
答え2
ソートには を使用する必要はなくcut
、sort
with を使用するだけです。管路:
sort -t " " -k 7 /etc/password | sort -t " " -k 1
パイプライン順序は、ログインシェルがプライマリキーとして使用され、ユーザー名がセカンダリキーとして使用されることを保証します。
-t " "
区切り文字として使用されますspace
。
2 つの列のみを表示するには、次を使用しますcut
(ソート後).
sort -t " " -k 7 /etc/password | sort -t " " -k 1 | cut -f 1,7 -d:
最後に、出力をファイルに保存できますusershells.txt
。
sort -t " " -k 7 /etc/password | sort -t " " -k 1 | cut -f 1,7 -d: > ~/usershells.txt
デフォルトの区切り文字が次の場合に使用:
できます。tr
Danny_l話す:
tr ":" " " /etc/password | sort -t " " -k 7| sort -t " " -k 1 | cut -f 1,7 -d: > ~/usershells.txt
答え3
パラメータfを使用するとフィールドを選択でき、dは区切り文字を設定します。
cut -f 1,7 -d: /etc/passwd
答え4
cut -f 1,7 -d: /etc/passwd | tr ":" " " | sort > ~/usershells.txt