J'ai un fichier (user.csv)comme ceci
ip,hostname,user,group,encryption,aduser,adattr
Je veux 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 ceci
ip,hostname,user,group,encryption,aduser,adattr
Je veux imprimer toutes les colonnes triées par utilisateur,
J'ai essayé awk -F ":" '{print|"$3 sort -n"}' user.csv
ça ne marche pas.
Pourquoi ne pas simplement sort
.
sort -t, -nk3 user.csv
donde
-t,
- définit votre délimiteur comme ,
.
-n
- vous donne un tri numérique. Ajouté puisque vous l'avez ajouté dans 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.
Étant donné que la question originale portait sur la façon d'utiliser awk
et chacune des 7 premières réponses utilise sort
à la place, et qu'il s'agit du premier résultat sur Google, voici comment l'utiliser awk
.
Exemple de fichier net.csv avec des en-têtes :
ip,hostname,user,group,encryption,aduser,adattr
192.168.0.1,gw,router,router,-,-,-
192.168.0.2,server,admin,admin,-,-,-
192.168.0.3,ws-03,user,user,-,-,-
192.168.0.4,ws-04,user,user,-,-,-
Et trier.awk :
#!/usr/bin/awk -f
# usage: ./sort.awk -v f=FIELD FILE
BEGIN {
FS=","
}
# each line
{
a[NR]=$0 ""
s[NR]=$f ""
}
END {
isort(s,a,NR);
for(i=1; i<=NR; i++) print a[i]
}
#insertion sort of A[1..n]
function isort(S, A, n, i, j) {
for( i=2; i<=n; i++) {
hs = S[j=i]
ha = A[j=i]
while (S[j-1] > hs) {
j--;
S[j+1] = S[j]
A[j+1] = A[j]
}
S[j] = hs
A[j] = ha
}
}
Pour l'utiliser :
awk sort.awk f=3 < net.csv # OR
chmod +x sort.awk
./sort.awk f=3 net.csv
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.