J'ai un fichier (user.csv) comme celui-ci
ip,hostname,user,group,encryption,aduser,adattr
voulez imprimer toutes les colonnes triées par utilisateur,
J'ai essayé awk -F ":" '{print|"$3 sort -n"}' user.csv
, ça ne marche pas.
J'ai un fichier (user.csv) comme celui-ci
ip,hostname,user,group,encryption,aduser,adattr
voulez imprimer toutes les colonnes triées par utilisateur,
J'ai essayé awk -F ":" '{print|"$3 sort -n"}' user.csv
, ça ne marche pas.
Réponses:
Que diriez-vous juste sort
.
sort -t, -nk3 user.csv
où
-t,
- définit votre délimiteur comme ,
.
-n
- vous donne un tri numérique. Ajouté depuis que vous l'avez ajouté lors de votre tentative. Si votre champ utilisateur est uniquement du texte, vous n'en avez pas besoin.
-k3
- définit le champ (clé). l'utilisateur est le troisième champ.
sort -t, -nk3 filename.csv | sort -t, -nk6
- d'abord il triera par colonne 3, puis triera par colonne 6 afin que la colonne 6 soit triée correctement jusqu'au bout et pour toutes les lignes où la colonne 6 est la même, celles-ci seront triées par colonne 3 .
sort -t ',' -k3,3n -k6,6n
sera meilleur. -k3
utilisera la colonne 3 et le reste de la ligne.
Utilisez sed pour supprimer l'ID utilisateur en double, en supposant que les ID utilisateur ne contiennent aucun espace.
awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //'
sort
sait déjà comment trier selon une colonne particulière, mais cette technique - connue sous le nom de transformée de Schwartz - est utile lorsque le champ sur lequel vous souhaitez trier n'est pas trivialement une colonne bien définie.
Vous pouvez choisir un délimiteur, dans ce cas, j'ai choisi un deux-points et imprimé la colonne numéro un, en triant par ordre alphabétique:
awk -F\: '{print $1|"sort -u"}' /etc/passwd
essaye ça -
awk '{print $0|"sort -t',' -nk3 "}' user.csv
OU
sort -t',' -nk3 user.csv
awk -F "," '{print $0}' user.csv | sort -nk3 -t ','
Cela devrait fonctionner
sort -t, -k3 file