J'ai un fichier comme celui-ci:
FirstName, FamilyName, Address, PhoneNumber
Comment puis-je le trier par FamilyName?
J'ai un fichier comme celui-ci:
FirstName, FamilyName, Address, PhoneNumber
Comment puis-je le trier par FamilyName?
Réponses:
S'il s'agit d'UNIX:
sort -k 2 file.txt
Vous pouvez utiliser plusieurs -k
indicateurs pour trier sur plus d'une colonne. Par exemple, pour trier par nom de famille puis par prénom en tant que bris d'égalité:
sort -k 2,2 -k 1,1 file.txt
Options pertinentes de "man sort":
-k, --key = POS1 [, POS2]
démarrer une clé à POS1, la terminer à POS2 (origine 1)
POS est F [.C] [OPTS], où F est le numéro de champ et C la position du caractère dans le champ. OPTS est une ou plusieurs options de tri à une lettre, qui remplacent les options de tri globales pour cette clé. Si aucune clé n'est donnée, utilisez la ligne entière comme clé.
-t, --field-separator = SEP
utiliser SEP au lieu de la transition non vide à vide
--field-separator=','
si vous pouvez avoir un opérateur de saisie de données pour saisir des valeurs pour "Prénom" comme "Billy Bob" ou autre ... les espaces peuvent facilement entrer dans vos données si vous ne vous en protégez pas, mais les virgules sont relativement peu probables.
-b
option. En effet, sort
on considère en fait que la chaîne à trier commence juste après la virgule et non à partir de la première lettre de la colonne. De plus, vous devrez peut-être préfixer la commande avec LC_ALL=C
, pour éviter tout effet secondaire dû aux paramètres régionaux, qui peut se produire même sur un simple fichier ASCII.
-b
( --ignore-leading-blanks
). Pour clarifier un peu: echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2
donne la a<SPACE><SPACE>b
première (la deuxième colonne commence après la première non-blank to blank transition
, et <SPACE><SPACE>b
est avant <SPACE>a
), mais avec -b
elle donne aa<SPACE>a
comme prévu ( a
est avant b
).
sort -nk2 file.txt
En conséquence, vous pouvez modifier le numéro de colonne.