join - Datei ist sortiert

1206
diego9403

Ich habe versucht, zwei Dateien zusammenzufügen, aber ich weiß nicht, warum Join mir nicht zuhört.

Datei i:

1 afjsadfjasdf 3 afdadsfa 4 afjdsakjfads 5 asdfadsfads 9 asfadsfads 

Datei k:

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

Mein Befehl:

join -1 1 -2 1 i k >ik 

Und Fehler:

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

Könnten Sie mir sagen, warum es nicht funktioniert?

0

1 Antwort auf die Frage

1
jcbermu

Damit --nocheck-orderes funktioniert. Die Änderung von 1 Ziffer zu 2 Ziffern führt zu dem Fehler. Außerdem vergleicht join standardmäßig die erste Spalte jeder Datei. Sie benötigen das -1 1 -2 1Teil nicht.

@ diego9403, Zum Erweitern erfordert "join", dass die Dateien ** lexikalisch ** sortiert werden. Laut Wörterbuch geht das Wort "10" nach "1", aber vor "2". Eine andere Möglichkeit, Ihren Befehl zu schreiben: `join -j 1 <(sort i) <(sort k)` glenn jackman vor 8 Jahren 2
@ glennjackman Ich hatte bereits die "--nocheck-order" -Lösung angewendet, aber ich wunderte mich immer noch, warum es sich so verhält, und in der Manpage, die sich auf die lexikalische Sortierung bezieht, ist nichts erwähnt. Dank dieser Informationen ist es sinnvoll now (so etwas wie "sort" ohne "-n" -Flag, Verhalten ist dasselbe) linux_newbie vor 5 Jahren 0
Meine join (1) -Manpage sagt "Wichtig: FILE1 und FILE2 müssen nach den Join-Feldern sortiert werden." plus weitere Informationen. Fragen Sie * warum * müssen die Dateien sortiert werden? Aus Effizienz- / Genauigkeitsgründen nehme ich an: Die Join-Art wird zu einer Zusammenführung, wenn die Dateien sortiert werden. glenn jackman vor 5 Jahren 0