Trier le fichier sous Unix en utilisant les six premiers caractères d’une ligne

Je veux sortinger le fichier en utilisant les six premiers caractères d’une ligne. Il devrait ignorer l’ordre de sorting par défaut après le sixième caractère. J’ai essayé d’utiliser la commande ci-dessous, mais le système prend l’ordre de sorting par défaut après le sixième caractère.

sort -k 1,6 filename.txt 

Fichier d’entrée: “filename.txt”

 09289720150531N201505220820D20150514 09289720150531N201505220820A20150516 08806020150531N201505290810D20150526 08806020150531N201505290810A20150528 

La sortie devrait être:

 08806020150531N201505290810D20150526 08806020150531N201505290810A20150528 09289720150531N201505220820D20150514 09289720150531N201505220820A20150516 

Mais ma sortie de commande est la suivante:

 08806020150531N201505290810A20150528 08806020150531N201505290810D20150526 09289720150531N201505220820A20150516 09289720150531N201505220820D20150514 

L’option telle qu’illustrée utilise la position du champ . Si vous changez cela en quelque chose comme -k1.1,1.6 il utilisera la position du caractère dans le premier champ. Ceci est une fonctionnalité POSIX étendue , susceptible d’être fournie sur la plupart des plates-formes.

Cependant, dans votre exemple, il n’y a que deux valeurs distinctes dans les positions de caractère 1-6: 088060 et 092897 . La commande de sorting standard n’a pas de fonctionnalité pour ignorer les colonnes, mais uniquement pour utiliser des colonnes. Alors que GNU sort fournit une extension ( -s pour “désactiver la comparaison de dernier recours”), le sorting Solaris ne possède pas une telle extension. Une fois les clés de sorting sockets en compte, il sortinge le rest des lignes.

Il y a un libellé vague dans son manuel qui suggère que -u fera ce que vous voulez:

Lorsqu’il y a plusieurs champs clés, les clés ultérieures ne sont comparées qu’une fois que toutes les clés précédentes sont égales. Sauf si l’option -u est spécifiée, les lignes qui se comparent autrement sont ordonnées comme si aucune des options -d , -f , -i , -n ou -k n’était présente (mais avec -r toujours en vigueur, si c’était le cas). spécifiée) et avec tous les octets dans les lignes significatives pour la comparaison.

Cependant – revisitant ceci – le libellé de ceci est trompeur puisque -u est utilisé pour filtrer les doublons.

Un commentaire suggère que -k1.1,1.6 pourrait être réduit à -k1.6 , et que les tests avec Solaris 10 auraient confirmé que cela fonctionnerait. C’est avec /usr/bin/sort , bien sûr. Sur ma copie de Solaris 10, il existe une copie supplémentaire de sorting, dans /opt/sfw/bin/sort :

 $ /opt/sfw/bin/sort --version sort (GNU coreutils) 5.97 

et ce programme prend en charge l’option -s indiquée ci-dessus. Avec cette option, le programme produit la sortie qui a été demandée.