rejoindre - le fichier est en cours de tri

0

J'ai essayé de joindre deux fichiers, mais je ne sais pas pourquoi rejoindre ne m'écoute pas.

Fichier i:

1 afjsadfjasdf
3 afdadsfa
4 afjdsakjfads
5 asdfadsfads
9 asfadsfads

Fichier k:

1 fdasdfadsfads
2 dfasjfadsjfas
3 dsafadsfadsf
4 asfdasdfadsf
9 asdfadsfadsfa
10 adsfadsfa

Ma commande:

join -1 1 -2 1 i k >ik

Et erreur:

join: k:6: is not sorted: 10 adsfadsfa

Pourriez-vous me dire pourquoi cela ne fonctionne pas?

diego9403
la source

Réponses:

1

Utilisez --nocheck-orderpour le faire fonctionner. Le passage de 1 à 2 chiffres génère l'erreur. De plus, par défaut, join compare la première colonne de chaque fichier, vous n’avez pas besoin de la -1 1 -2 1pièce.

jcbermu
la source
2
@ diego9403, Pour développer, il joinfaut que les fichiers soient triés de manière lexicale . Selon le dictionnaire, le mot "10" va après "1" mais avant "2". Une autre façon d'écrire votre commande:join -j 1 <(sort i) <(sort k)
glenn jackman le
@glennjackman j'avais déjà appliqué la --nocheck-ordersolution , mais je me demandais toujours pourquoi il se comporte comme ça et il n'y a aucune mention dans les pages de manuel relatives au tri lexical si grâce à ce bit d'information, il est maintenant logique (quelque chose comme l' utilisation sortsans -ndrapeau, le comportement est le même)
linux_newbie
Ma page de manuel join (1) indique "Important: FILE1 et FILE2 doivent être triés sur les champs de la jointure." plus plus d'informations. Vous vous demandez pourquoi la jointure nécessite un tri des fichiers? Pour des raisons d'efficacité / de précision, je suppose: le type de jointure se transforme en une fusion si les fichiers sont triés.
Glenn Jackman