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?

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.