A join parancs használata Linuxon

Ha két szövegfájlból szeretne adatokat egyesíteni egy közös mező egyeztetésével, használhatja a Linux join parancsát. Egy kis dinamizmust ad a statikus adatfájloknak. Megmutatjuk, hogyan kell használni.

Egyező adatok a fájlok között

Az adatok a királyok. Vállalatok, vállalkozások és háztartások egyaránt futnak rajta. De a különböző fájlokban tárolt és különböző emberek által összegyűjtött adatok fájdalmasak. Amellett, hogy tudjuk, mely fájlokat kell megnyitni a kívánt információ megtalálásához, a fájlok elrendezése és formátuma valószínűleg eltérő.

Meg kell küzdenie az adminisztratív fejfájással is, hogy mely fájlokat kell frissíteni, melyekről kell biztonsági másolatot készíteni, melyek örököltek, és melyeket lehet archiválni.

Ráadásul, ha konszolidálnia kell adatait vagy elemzést kell végeznie egy teljes adatkészleten, további problémát jelent. Hogyan lehet racionalizálni az adatokat a különböző fájlok között, mielőtt megtenné, amit kell? Hogyan közelíted meg az adat-előkészítési szakaszt?

A jó hír az, hogy ha a fájlok legalább egy közös adatelemen osztoznak, a Linux join parancs kihúzhat a sárból.

Az adatfájlok

Az összes adat, amelyet a join parancs használatának bemutatására használunk, kitalált, a következő két fájllal kezdve:

cat file-1.txt
cat file-2.txt

A tartalma

A következő a fájl-1.txt tartalma:

1 Adore Varian [email protected] Female 192.57.150.231
2 Nancee Merrell [email protected] Female 22.198.121.181
3 Herta Friett [email protected] Female 33.167.32.89
4 Torie Venmore [email protected] Female 251.9.204.115
5 Deni Sealeaf [email protected] Female 210.53.81.212
6 Fidel Bezley [email protected] Male 72.173.218.75
7 Ulrikaumeko Standen [email protected] Female 4.204.0.237
8 Odell Jursch [email protected] Male 1.138.85.117

Van egy sor számozott sorunk, és minden sor tartalmazza a következő információkat:

Egy szám
Egy keresztnév
Egy vezetéknév
Egy email címet
A személy neme
Egy IP-cím

A következő a fájl-2.txt tartalma:

1 Varian [email protected] Female Western New York $535,304.73
2 Merrell [email protected] Female Finger Lakes $309,033.10
3 Friett [email protected] Female Southern Tier $461,664.44
4 Venmore [email protected] Female Central New York $175,818.02
5 Sealeaf [email protected] Female North Country $126,690.15
6 Bezley [email protected] Male Mohawk Valley $366,733.78
7 Standen [email protected] Female Capital District $674,634.93
8 Jursch [email protected] Male Hudson Valley $663,821.09

A 2.txt fájl minden sora a következő információkat tartalmazza:

Egy szám
Egy vezetéknév
Egy email címet
A személy neme
New York egyik régiója
Egy dollár érték

A join parancs „mezőkkel” működik, ami ebben az összefüggésben egy szóközzel körülvett szövegrészt, egy sor elejét vagy egy sor végét jelenti. Ahhoz, hogy a két fájl sorai illeszkedjenek egymáshoz, minden sornak tartalmaznia kell egy közös mezőt.

  Hogyan készítsünk papírt a Minecraftban

Ezért csak akkor tudunk egy mezőt egyeztetni, ha mindkét fájlban megjelenik. Az IP-cím csak egy fájlban jelenik meg, szóval ez nem jó. A keresztnév csak egy fájlban jelenik meg, így azt sem használhatjuk. A vezetéknév mindkét fájlban szerepel, de rossz választás lenne, mivel különböző embereknek ugyanaz a vezetékneve.

A férfi és női bejegyzésekkel sem lehet az adatokat összekapcsolni, mert túlságosan homályosak. A New York-i régiók és a dollárértékek is csak egy fájlban jelennek meg.

Használhatjuk azonban az e-mail címet, mert mindkét fájlban megtalálható, és mindegyik egyedi egyén számára. A fájlok gyors áttekintése azt is megerősíti, hogy a sorok mindegyikében ugyanannak a személynek felelnek meg, így a sorszámokat használhatjuk mezőként az egyeztetéshez (később egy másik mezőt használunk).

Vegye figyelembe, hogy a két fájlban eltérő számú mező található, ami rendben van – az egyes fájlokból meg tudjuk határozni, hogy melyik mezőt használja.

Ügyeljen azonban olyan mezőkre, mint New York régiói; egy szóközzel elválasztott fájlban egy régió nevében minden szó mezőnek tűnik. Mivel egyes régióknak két- vagy háromszavas nevek vannak, valójában különböző számú mező van ugyanabban a fájlban. Ez mindaddig rendben is van, amíg a New York-i régiók előtti sorban megjelenő mezőkre egyezik.

A csatlakozási parancs

Először azt a mezőt kell rendezni, amelyikkel megmérkőzöl. Mindkét fájlban vannak növekvő számok, tehát megfelelünk ennek a kritériumnak. Alapértelmezés szerint a join a fájl első mezőjét használja, amit szeretnénk. Egy másik ésszerű alapértelmezés az, hogy a join azt várja, hogy a mezőelválasztók szóközök legyenek. Megint megvan, hogy csatlakozhassunk.

Mivel az összes alapértelmezett beállítást használjuk, a parancsunk egyszerű:

join file-1.txt file-2.txt

A

A join a fájlokat „egyes fájlnak” és „kettesnek” tekinti, attól függően, hogy milyen sorrendben szerepelnek a parancssorban.

A kimenet a következő:

1 Adore Varian [email protected] Female 192.57.150.231 Varian [email protected] Female Western New York $535,304.73
2 Nancee Merrell [email protected] Female 22.198.121.181 Merrell [email protected] Female Finger Lakes $309,033.10
3 Herta Friett [email protected] Female 33.167.32.89 Friett [email protected] Female Southern Tier $461,664.44
4 Torie Venmore [email protected] Female 251.9.204.115 Venmore [email protected] Female Central New York $175,818.02
5 Deni Sealeaf [email protected] Female 210.53.81.212 Sealeaf [email protected] Female North Country $126,690.15
6 Fidel Bezley [email protected] Male 72.173.218.75 Bezley [email protected] Male Mohawk Valley $366,733.78
7 Ulrikaumeko Standen [email protected] Female 4.204.0.237 Standen [email protected] Female Capital District $674,634.93
8 Odell Jursch [email protected] Male 1.138.85.117 Jursch [email protected] Male Hudson Valley $663,821.09

A kimenet formázása a következőképpen történik: Először az a mező kerül kinyomtatásra, amelyre a sorok illeszkedtek, ezt követik az első fájl többi mezője, majd a második fájl mezői, amelyek nem tartalmazzák az egyezési mezőt.

Rendezetlen mezők

Próbáljunk meg valamit, amiről tudjuk, hogy nem fog működni. A sorokat egy fájlba helyezzük el, így a csatlakozás nem tudja megfelelően feldolgozni a fájlt. A 3.txt fájl tartalma megegyezik a 2.txt fájléval, de a nyolcadik sor az ötödik és a hatodik sor között van.

  Programok egyszerű eltávolítása Ubuntuban a qUninstaller segítségével

A következő a fájl-3.txt tartalma:

1 Varian [email protected] Female Western New York $535,304.73
2 Merrell [email protected] Female Finger Lakes $309,033.10
3 Friett [email protected] Female Southern Tier $461,664.44
4 Venmore [email protected] Female Central New York $175,818.02
5 Sealeaf [email protected] Female North Country $126,690.15
8 Jursch [email protected] Male Hudson Valley $663,821.09
6 Bezley [email protected] Male Mohawk Valley $366,733.78
7 Standen [email protected] Female Capital District $674,634.93

A következő parancsot írjuk be, hogy megpróbáljunk csatlakozni a fájl-3.txtto fájl-1.txt fájlhoz:

join file-1.txt file-3.txt

A

A join azt jelenti, hogy a 3.txt fájl hetedik sora nem megfelelő, ezért nincs feldolgozva. A hetes sor az, amelyik a hatos számmal kezdődik, amelynek nyolc előtt kell lennie a helyesen rendezett listában. A fájl hatodik sora (amely „8 Odell”-lel kezdődik) volt az utolsó feldolgozás, így látjuk a kimenetet.

Használhatja a –check-order opciót, ha meg szeretné nézni, hogy a csatlakozás megfelel-e a fájlok rendezési sorrendjének – a rendszer nem kísérli meg az egyesítést.

Ehhez a következőket írjuk be:

join --check-order file-1.txt file-3.txt

A

A join előre megmondja, hogy probléma lesz a 3.txt fájl hetedik sorával.

Hiányzó sorokat tartalmazó fájlok

A 4.txt fájlban az utolsó sort eltávolítottuk, így nincs nyolcas sor. A tartalom a következő:

1 Varian [email protected] Female Western New York $535,304.73
2 Merrell [email protected] Female Finger Lakes $309,033.10
3 Friett [email protected] Female Southern Tier $461,664.44
4 Venmore [email protected] Female Central New York $175,818.02
5 Sealeaf [email protected] Female North Country $126,690.15
6 Bezley [email protected] Male Mohawk Valley $366,733.78
7 Standen [email protected] Female Capital District $674,634.93

Beírjuk a következőket, és meglepő módon a join nem panaszkodik, és az összes sort feldolgozza:

join file-1.txt file-4.txt

A

A kimenet hét egyesített sort tartalmaz.

Az -a (print unpairable) opció arra utasítja a join-t, hogy a nem egyeztethető sorokat is kinyomtassa.

Ide írjuk be a következő parancsot, hogy a join utasítást adva kinyomtassa azokat a sorokat az első fájlból, amelyek nem illeszthetők a második fájl soraihoz:

join -a 1 file-1.txt file-4.txt

A

Hét sor illeszkedik, és az első fájl nyolc sora kinyomtatva, párosítás nélkül. Nincs összevont információ, mert a 4.txt fájl nem tartalmazott egy nyolcas sort, amelyhez illeszthető lenne. Azonban legalább továbbra is megjelenik a kimenetben, így tudja, hogy nincs egyezése a 4.txt fájlban.

A következő -v (összekapcsolt sorok elnyomása) parancsot begépeljük, hogy felfedjük azokat a sorokat, amelyeknek nincs egyezése:

join -v file-1.txt file-4.txt

A

Azt látjuk, hogy a nyolcas sor az egyetlen, amelyiknek nincs egyezése a kettes fájlban.

Más mezők illesztése

Párosítsunk két új fájlt egy olyan mezőben, amely nem az alapértelmezett (első mező). A következő a 7.txt fájl tartalma:

[email protected] Female 192.57.150.231
[email protected] Female 210.53.81.212
[email protected] Male 72.173.218.75
[email protected] Female 33.167.32.89
[email protected] Female 22.198.121.181
[email protected] Male 1.138.85.117
[email protected] Female 251.9.204.115
[email protected] Female 4.204.0.237

És a következő a fájl-8.txt tartalma:

Female [email protected] Western New York $535,304.73
Female [email protected] North Country $126,690.15
Male [email protected] Mohawk Valley $366,733.78
Female [email protected] Southern Tier $461,664.44
Female [email protected] Finger Lakes $309,033.10
Male [email protected] Hudson Valley $663,821.09
Female [email protected] Central New York $175,818.02
Female [email protected] Capital District $674,634.93

A csatlakozáshoz az egyetlen értelmes mező az e-mail cím, amely az első fájlban az első, a másodikban pedig a kettes mező. Ennek kielégítésére használhatjuk a -1 (fájl egy mező) és -2 (fájl két mező) opciókat. Ezeket egy számmal fogjuk követni, amely jelzi, hogy az egyes fájlokban melyik mezőt kell használni a csatlakozáshoz.

  A 6 legjobb fotókezelő eszköz Linuxhoz

A következőket írjuk be, hogy a join-nek az első mezőt, a másodikat pedig a második mezőt használja:

join -1 1 -2 2 file-7.txt file-8.txt

A

A fájlok az e-mail címen vannak egyesítve, amely minden sor első mezőjeként jelenik meg a kimenetben.

Különböző mezőelválasztók használata

Mi a teendő, ha olyan fájljai vannak, amelyek mezői nem szóközzel vannak elválasztva?

A következő két fájl vesszővel tagolt – az egyetlen szóköz van a többszavas helynevek között:

cat file-5.txt
cat file-6.txt

A tartalma

A -t (elválasztó karakter) segítségével megmondhatjuk, hogy a join melyik karaktert használja mezőelválasztóként. Ebben az esetben ez a vessző, ezért a következő parancsot írjuk be:

join -t, file-5.txt file-6.txt

A

Minden sor illeszkedik, és a szóközök megmaradnak a helynevekben.

A Letter Case figyelmen kívül hagyása

Egy másik fájl, a file-9.txt, majdnem teljesen megegyezik a 8.txt fájllal. Az egyetlen különbség az, hogy egyes e-mail címek nagybetűvel rendelkeznek, amint az alább látható:

Female [email protected] Western New York $535,304.73
Female [email protected] North Country $126,690.15
Male [email protected] Mohawk Valley $366,733.78
Female [email protected] Southern Tier $461,664.44
Female [email protected] Finger Lakes $309,033.10
Male [email protected] Hudson Valley $663,821.09
Female [email protected] Central New York $175,818.02
Female [email protected] Capital District $674,634.93

Amikor összekapcsoltuk a 7.txt fájlt és a 8.txt fájlt, tökéletesen működött. Nézzük meg, mi történik a 7.txt és a 9.txt fájlokkal.

A következő parancsot írjuk be:

join -1 1 -2 2 file-7.txt file-9.txt

A

Csak hat sort találtunk. A kis- és nagybetűk közötti különbségek megakadályozták a másik két e-mail cím összekapcsolását.

Használhatjuk azonban a -i (kis- és nagybetűk figyelmen kívül hagyása) kapcsolót, hogy a csatlakozást a különbségek figyelmen kívül hagyására kényszerítsük, és az ugyanazt a szöveget tartalmazó mezőket kis- és nagybetűtől függetlenül illessze.

A következő parancsot írjuk be:

join -1 1 -2 2 -i file-7.txt file-9.txt

A

Mind a nyolc sor illeszkedik és sikeresen egyesült.

Keverd össze és párosítsd

A csatlakozásban hatalmas szövetségesed van, amikor kínos adat-előkészítéssel küzdesz. Lehet, hogy elemeznie kell az adatokat, vagy megpróbálja formába masszírozni, hogy importálhasson egy másik rendszerbe.

Nem számít, milyen a helyzet, örülni fog, hogy csatlakozik a sarkához!