ユーザーが入力したUIDを取得し、それを使用して/ etc / passwdディレクトリを参照し、データを名前で並べ替え、ユーザー名、名前、姓だけを順番に表示する必要があります。私が経験している問題は、出力をソートすることです。次のコマンドを使用すると、
cat /etc/passwd |grep $id_prefix | sort | cut -d: -f1,5
出力はユーザー名に基づいてソートされ、姓、名前の順に表示されます。コマンドをこのように変更できることを知っています。
cat /etc/passwd |grep $id_prefix | sort | cut -d: -f5 | sed 's/\([^ ]*\)[ ][ ]*\([^ ]*\)/\2 \1/'
その後、出力を並べ替え、必要に応じて切り取ります。ただし、FIELD1(ユーザー名)は含まれません。必要なすべてのフィールドを正しく表示して並べ替えるにはどうすればよいですか?
ベストアンサー1
次のことができます。
awk -F: '{ print $1" "$5 }' /etc/passwd | sort -k2
/etc/passwd
これにより、2番目のフィールドのユーザー名と説明フィールドが解析されます。このフィールドは、sort
姓と姓の順序でリストされている場合はユーザーの名前になります。
以下はマージの例ですgrep
。
grep "500\|501\|502" /etc/passwd | awk -F: '{ print $1" "$5 }' | sort -k2
jira Atlassian JIRA
dick Richard Jameson
bob Robert Gillespie
編集する:
ファイルの名前と姓の順序を変更するには、次のようにします/etc/passwd
。
awk -F: '{ print $1" "$5 }' /etc/passwd | awk '{ print $1" "$3" "$2 }' | sort -k2
上記の例では、/etc/passwd
ファイルの名前と姓を変更します。
grep "500\|501\|502" /etc/passwd | awk -F: '{ print $1" "$5 }' | awk '{ print $1" "$3" "$2 }' | sort -k2
これは、名前/姓、姓/名前を区切るカンマがなくてもかまいません。
編集(2番目):
姓/名前はカンマで区切られているため、次のように機能します。
awk -F: /$id_prefix/'{ print $1" "$5 }' /etc/passwd | awk -F, '{ print $1" "$2 }' | awk '{ print $1" "$3" "$2 }' | sort -k2
grep
でパイピングしないことを提案した@Jidderに感謝しますawk
。