sortおよびcutコマンドを通過した出力を反転する方法

sortおよびcutコマンドを通過した出力を反転する方法

ユーザーが入力した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

関連情報