A join Unix-utasítás a relációs adatbázisokban szokásos join műveletet végzi el két szövegfile között. Az utasítás a két file-t szövegtáblázatnak tekinti, a sorokat egy elválasztó karakterrel (alaphelyzetben helyközzel, de ez változtatható) oszlopokra vágja.

Mindkét file-ban meg kell adni egy-egy speciális kulcsoszlopot. A join összepárosítja az azonos értékeket a két file kulcsoszlopaiban, és az eredményben egyetlen sorként írja ki; a kulcsoszlopot csak egyszer, azt követi az első, majd a második file többi oszlopa.

Mindkét file a saját kulcsoszlopa szerint rendezett kell legyen.

Az utasítás alakja

join kapcsolók file1 file2

A kapcsolók egybetűsek, a hozzájuk tartozó értéket helyközzel kell elválasztani.Linuxban ez nem kötelező, de pl. Solarisban igen. A fontosabbak: -1 oszlop az első file kulcsnak kijelölt oszlopa (alapérték: 1) -2 oszlop a második file kulcsnak kijelölt oszlopa (alapérték: 1) -t karakter az oszlopokat elválasztó karakter (alaphelyzetben helyköz)Két vagy több egymás utáni elválasztó karakter egy oszlophatárnak számít. -a n filen sorait írja ki akkor is, ha nincs párjuk a másik file-ban (outer join) -v n filen azon sorait írja ki, melyeknek nincs párjuk a másik file-ban

Linuxban ha mindkét file-ban azonos oszlop a kulcs, ezt az oszlopot a -j kapcsolóval adhatjuk meg.

Példa

f1.txt második, f2.txt első oszlopa a kulcs. Mindkét file a kulcsra rendezett. f2.txt-ben két azonos kulcsú sor található.

Utasítás/SQL-analóg Eredményjoin -1 2 -2 1 f1.txt f2.txt 1 f1sor1 f2sor1 2 f1sor2 f2sor2 2 f1sor2 f2sor3select * from f1, f2 where f1.oszl2 = f2.oszl1;(normál join)join -1 2 -2 1 -a 1 f1.txt f2.txt 1 f1sor1 f2sor1 2 f1sor2 f2sor2 2 f1sor2 f2sor3 3 f1sor3 x f1sor4select * from f1, f2 where f1.oszl2 = f2.oszl1(+);(outer join)join -1 2 -2 1 -a 2 f1.txt f2.txt 1 f1sor1 f2sor1 2 f1sor2 f2sor2 2 f1sor2 f2sor3 f2sor4 4 f2sor5 yselect * from f1, f2 where f1.oszl2(+) = f2.oszl1;(outer join)join -1 2 -2 1 -v 1 f1.txt f2.txt 3 f1sor3 x f1sor4select * from f2 where f2.oszl1 not in(select f1.oszl2 from f1);(not in)join -1 2 -2 1 -v 2 f1.txt f2.txt f2sor4 4 f2sor5 yselect * from f1 where f1.oszl2 not in(select f2.oszl1 from f2);(not in)join -1 2 -2 1 -v 1 -v 2 f1.txt f2.txt 3 f1sor3 f2sor4 4 x f1sor4 f2sor5 yselect * from f2 where f2.oszl1 not in(select f1.oszl2 from f1) union select * from f1 where f1.oszl2 not in(select f2.oszl1 from f2);(különbség)Az SQL-utasítás csak akkor hajtható végre, ha f1 és f2 azonos számú és típusú oszlopokkal rendelkezik. A fenti utasítás csak analógia. f1.txtf1sor1 1 f1sor2 2 f1sor3 3 f1sor4 x f2.txt1 f2sor1 2 f2sor2 2 f2sor3 4 f2sor4 y f2sor5

Jegyzetek

Kategória:Unix-parancsok Kategória:Parancssori alkalmazások Kategória:Nyílt forrású szoftverek Kategória:Szabad szoftverek