
ユーザーが入力した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
。
答え2
あなたはこれをしなければなりません:
grep mohsen /etc/passwd | awk -F':' {'split($5,a,",");printf "username is :%s ,uid is: %s , name is %s \n",$1,$3,a[1] '}
出力は次のとおりです
username is :mohsen ,uid is: 1000 , name is Mohsen Pahlevanzadeh
答え3
私はあなたが次のように外れることができると思います:
grep $id_prefix /etc/passwd | cut --delimiter: --fields=1,5 | sort --field-separator=: --key=2
状況に応じて必要に応じて--ignore-case
オプションを追加することもできます。sort
確認する文書より多くの選択のために。
答え4
人々がなぜgrepをawkに持って来るのか分かりません。
awkを使用すると、これをすべて行うことができます。これは、姓と名がスペースで区切られていると仮定します。
ここで、USERNAME は検索語です。
awk -F: '/USERNAME/{split($5,a," ");print $1,a[2],a[1]}' etc/passwd