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

おすすめ記事