2010-11-25 4 views
2

J'ai une ligne délimitée par des tabulations, je veux trier les lignes uniquement par rapport à la première colonne.Tri Unix pour trier une seule colonne

peut-il être réalisé en utilisant le tri Unix?

u.s 2||`` U.S ''||527 || 107 
u.s. 2||`` U.S. ''||532 || 107 
us. 2||Us.||532 || 112 
u.s. 2||U.s.||629 || 112 
us. 2||US.||6444 || 112 
us 2||US||8655700 || 27 
u.s 2||U.s||992 || 112 

Il doit trier en utilisant

u.s 
u.s. 
us. 
u.s. 
us. 
us 
u.s 

points ne sont pas considérés par le genre. Celui ci-dessus est trié après l'utilisation de sort -k1. u.s. et nous. ne sont pas ensemble.

+0

Je ne sais pas ce que signifie la ligne délimité par des tabulations. Pouvez-vous s'il vous plaît donner juste un exemple? –

+0

Les points ne sont pas pris en compte lors du tri – AlgoMan

Répondre

2

Si vous le tri par le premier champ, il n'y a aucune raison de spécifier la clé à moins que vous voulez ignorer le reste de la ligne. Si vous voulez faire cela, vous devez faire -k1,1. Vous devez spécifier les paramètres régionaux C (ou vous pouvez utiliser les paramètres régionaux POSIX synonyme de ne pas ignorer les périodes.

LC_COLLATE=C sort -k1,1 inputfile 

ou

LC_COLLATE=C sort inputfile 
0

Je crois que vous cherchez:

sort -k 1 filetosort 

Tab est un séparateur des espaces, ce qui est le séparateur par défaut pour le tri.

0

Mon tri (sous Linux) peut le faire. Je ne sais pas comment c'est portable. En BASH:

sort -k1 -t$'\t' 

-k1 donne l'identifiant de la colonne clé (s), -t spécifie le séparateur de champ.

+0

les points et les espaces ne sont pas pris en compte, tri traite comme s'il n'y avait pas de points du tout. – AlgoMan

1

Vous avez probablement besoin de définir les paramètres régionaux pour le tri, et le mettre à l'environnement local C:

LANG=C sort -k1 data.file 
Questions connexes