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.
join kapcsolók file1 file2
A kapcsolók egybetűsek, a hozzájuk tartozó értéket helyközzel kell elválasztani.[1] 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)[2]
|
-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.
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ény
|
join -1 2 -2 1 f1.txt f2.txt
|
1 f1sor1 f2sor1
2 f1sor2 f2sor2
2 f1sor2 f2sor3
|
select * 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 f1sor4
|
select * 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 y
|
select * from f1, f2 where f1.oszl2(+) = f2.oszl1; (outer join)
|
join -1 2 -2 1 -v 1 f1.txt f2.txt
|
3 f1sor3
x f1sor4
|
select * 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 y
|
select * 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 y
|
select * 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)[3]
|
|
f1.txt
|
f1sor1 1
f1sor2 2
f1sor3 3
f1sor4 x
|
f2.txt
|
1 f2sor1
2 f2sor2
2 f2sor3
4 f2sor4
y f2sor5
|
|
- ↑ Linuxban ez nem kötelező, de pl. Solarisban igen.
- ↑ Két vagy több egymás utáni elválasztó karakter egy oszlophatárnak számít.
- ↑ 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.
|
---|
Fájlrendszer | |
---|
Processzek | |
---|
Felhasználói környezet | |
---|
Szövegkezelés | |
---|
Shell programozás | |
---|
Hálózat | |
---|
Keresés | |
---|
Dokumentáció | |
---|
Egyéb | |
---|