私はこのようなファイル(user.csv)を持っています
ip,hostname,user,group,encryption,aduser,adattr
ユーザーごとに並べ替えられたすべての列を印刷したい、
試しましたがawk -F ":" '{print|"$3 sort -n"}' user.csv
、動作しません。
私はこのようなファイル(user.csv)を持っています
ip,hostname,user,group,encryption,aduser,adattr
ユーザーごとに並べ替えられたすべての列を印刷したい、
試しましたがawk -F ":" '{print|"$3 sort -n"}' user.csv
、動作しません。
回答:
どうですかsort
。
sort -t, -nk3 user.csv
どこ
-t,
-区切り文字をとして定義します,
。
-n
-数値ソートを提供します。あなたがあなたの試みでそれを追加したので追加されました。ユーザーフィールドがテキストのみの場合は、必要ありません。
-k3
-フィールド(キー)を定義します。userは3番目のフィールドです。
sort -t, -nk3 filename.csv | sort -t, -nk6
-最初に列3で並べ替え、次に列6で並べ替えるので、列6は完全に正しく並べ替えられ、列6が同じ行の場合は、列3で並べ替えられます。 。
sort -t ',' -k3,3n -k6,6n
方が良いでしょう。-k3
列3と残りの行を使用します。
ユーザーIDにスペースが含まれていない場合は、sedを使用して重複するユーザーIDを削除します。
awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //'
sort
特定の列で並べ替える方法はすでに知っていますが、この手法(Schwartzian変換と呼ばれます)は、並べ替えるフィールドが明確に定義された列ではない場合に役立ちます。
区切り文字を選択できます。この場合、コロンを選択し、列番号1をアルファベット順に並べ替えて印刷しました。
awk -F\: '{print $1|"sort -u"}' /etc/passwd
awk -F "," '{print $0}' user.csv | sort -nk3 -t ','
これはうまくいくはずです
sort -t, -k3 file