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