Hoe Gebruik je de opdracht join op Linux

0
44
Fatmawati Achmad Zaenuri/Shutterstock

Als u wilt samenvoegen van gegevens uit twee tekstbestanden door het afstemmen van een gemeenschappelijk veld, kunt u gebruik maken van de Linux-opdracht join. Het voegt een strooi van dynamiek aan uw statische gegevens bestanden. Wij laten u zien hoe om het te gebruiken.

De Overeenkomende Gegevens Over Bestanden

Data is king. Bedrijven, bedrijven en huishoudens uit te voeren. Maar de gegevens die zijn opgeslagen in verschillende bestanden en verzameld door verschillende mensen is een pijn. In aanvulling om te weten welke bestanden te openen om de informatie te vinden die u wilt, de lay-out en het formaat van de bestanden zijn waarschijnlijk anders.

Heb je ook te maken met de administratieve hoofdpijn van die bestanden moeten worden bijgewerkt, die moeten worden ondersteund, die zijn erfenis, en die kunnen worden gearchiveerd.

Plus, als u nodig hebt om het consolideren van uw gegevens of gedrag van een analyse over een volledige set gegevens, heb je een extra probleem. Hoe doe je het rationaliseren van de gegevens tussen de verschillende bestanden voordat je kunt doen wat je moet doen? Hoe benader je de gegevens voorbereidingsfase?

Het goede nieuws is dat als de bestanden aandeel ten minste één gemeenschappelijke data-element, de Linux-opdracht join kan trekken je uit het slijk.

De Data Bestanden

Alle gegevens zullen wij gebruiken om het demonstreren van het gebruik van de opdracht join is fictief, te beginnen met de volgende twee bestanden:

kat file-1.txt
kat file-2.txt

Het volgende is de inhoud van file-1.txt:

1 Aanbidden Varian avarian0@newyorker.com Vrouwelijke 192.57.150.231
2 Nancee Merrell nmerrell1@ted.com Vrouwelijke 22.198.121.181
3 Herta Friett hfriett2@dagondesign.com Vrouwelijke 33.167.32.89
4 Torie Venmore tvenmore3@gmpg.org Vrouwelijke 251.9.204.115
5 Deni Sealeaf dsealeaf4@nps.gov Vrouwelijke 210.53.81.212
6 Fidel Bezley fbezley5@lulu.com Man 72.173.218.75
7 Ulrikaumeko uur gps ustanden6@geocities.jp Vrouwelijke 4.204.0.237
8 Odell Jursch ojursch7@utexas.edu Man 1.138.85.117

We hebben een reeks van genummerde regels en elke regel bevat de volgende informatie:

  • Een aantal
  • Een eerste naam
  • Achternaam
  • Een e-mail adres
  • De persoon seks
  • Een IP-Adres

Het volgende is de inhoud van file-2.txt:

1 Varian avarian0@newyorker.com Vrouwelijke Western New York $535,304.73
2 Merrell nmerrell1@ted.com Vrouwelijke Finger Lakes $309,033.10
3 Friett hfriett2@dagondesign.com Vrouwelijke Zuid-Tier $461,664.44
4 Venmore tvenmore3@gmpg.org Vrouwelijke Centrum van New York $175,818.02
5 Sealeaf dsealeaf4@nps.gov Vrouwelijke Noorden van het Land, $126,690.15
6 Bezley fbezley5@lulu.com Man Mohawk Valley $366,733.78
7 uur gps ustanden6@geocities.jp Female Capital District $674,634.93
8 Jursch ojursch7@utexas.edu Man Hudson Valley $663,821.09

Elke regel in file-2.txt bevat de volgende informatie:

  • Een aantal
  • Achternaam
  • Een e-mail adres
  • De persoon seks
  • Een regio van New York
  • Een dollar waarde

De opdracht join werkt met “velden” die, in deze context, betekent dat een deel van de tekst omringd door spaties, het begin van een regel, of het einde van een regel. Voor het deelnemen aan match-up lijnen tussen de twee bestanden, moet elke regel bevat een gemeenschappelijk veld.

Daarom kunnen we alleen overeen met een veld als deze wordt weergegeven in beide bestanden. Het IP-adres alleen weergegeven in een file, dus dat is niet goed. De eerste naam wordt alleen weergegeven in een bestand, zodat we het niet kunnen gebruiken dat. De achternaam is in beide bestanden, maar het zou een slechte keuze, zoals verschillende mensen dezelfde achternaam hebben.

Je kunt niet bind de gegevens samen met de mannelijke en vrouwelijke items, hetzij, omdat ze te vaag zijn. De regio ‘ s van New York en de dollar van de waarden alleen weergegeven in één bestand te.

Echter, we kunnen gebruik maken van het e-mail adres omdat het in beide bestanden, en elk is uniek voor een persoon. Een snelle blik door de bestanden bevestigt ook de lijnen in elk corresponderen met dezelfde persoon, dus we kunnen gebruik maken van de lijn nummers als ons vakgebied aan te passen (we gebruiken een ander veld later).

Opmerking: er zijn een aantal verschillende velden in de twee bestanden, dat is prima—we kunnen vertellen mee het veld te gebruiken uit elk bestand.

Maar, kijk uit voor gebieden zoals de regio ‘ s van New York; in een met spaties gescheiden bestand, elk woord in de naam van een regio lijkt op een veld. Omdat sommige regio ‘ s hebben een twee – of drie-woord namen, je heb eigenlijk een aantal verschillende velden binnen hetzelfde bestand. Dit is okay, zolang je match op de velden die worden weergegeven in de regel voor de New York regio ‘ s.

De Opdracht join

Ten eerste, het gebied dat je gaat aan de wedstrijd moet worden gesorteerd. We hebben oplopende getallen in beide bestanden, dus we voldoen aan die criteria. Standaard mee maakt gebruik van het eerste veld in een bestand, dat is wat we willen. Een andere zinvolle standaard is dat lid worden verwacht dat het veld scheidingstekens om witruimte. Nogmaals, wij hebben dat, dus we kunnen gaan en brand-up doe.

Als we met behulp van de standaard instellingen, onze opdracht is simpel:

join file-1.txt file-2.txt

join beschouwt de bestanden naar “bestand” en “bestand” op basis van de volgorde waarin ze staan op de commando-regel.

De output is als volgt:

1 Aanbidden Varian avarian0@newyorker.com Vrouwelijke 192.57.150.231 Varian avarian0@newyorker.com Vrouwelijke Western New York $535,304.73
2 Nancee Merrell nmerrell1@ted.com Vrouwelijke 22.198.121.181 Merrell nmerrell1@ted.com Vrouwelijke Finger Lakes $309,033.10
3 Herta Friett hfriett2@dagondesign.com Vrouwelijke 33.167.32.89 Friett hfriett2@dagondesign.com Vrouwelijke Zuid-Tier $461,664.44
4 Torie Venmore tvenmore3@gmpg.org Vrouwelijke 251.9.204.115 Venmore tvenmore3@gmpg.org Vrouwelijke Centrum van New York $175,818.02
5 Deni Sealeaf dsealeaf4@nps.gov Vrouwelijke 210.53.81.212 Sealeaf dsealeaf4@nps.gov Vrouwelijke Noorden van het Land, $126,690.15
6 Fidel Bezley fbezley5@lulu.com Man 72.173.218.75 Bezley fbezley5@lulu.com Man Mohawk Valley $366,733.78
7 Ulrikaumeko uur gps ustanden6@geocities.jp Vrouwelijke 4.204.0.237 uur gps ustanden6@geocities.jp Female Capital District $674,634.93
8 Odell Jursch ojursch7@utexas.edu Man 1.138.85.117 Jursch ojursch7@utexas.edu Man Hudson Valley $663,821.09

De output is geformatteerd op de volgende manier: Het veld de lijnen waren afgestemd op wordt als eerste afgedrukt, gevolgd door de andere velden uit het bestand, en vervolgens de velden van het bestand, zonder de overeenkomst veld.

Gesorteerd Velden

Laten we proberen iets weten wij niet werken. We zetten de lijnen in een bestand uit om zo samen met het niet kunnen verwerken van het bestand correct. De inhoud van de file-3.txt zijn dezelfde als file-2.txt maar regel acht is tussen de lijnen vijf en zes.

Het volgende is de inhoud van file-3.txt:

1 Varian avarian0@newyorker.com Vrouwelijke Western New York $535,304.73
2 Merrell nmerrell1@ted.com Vrouwelijke Finger Lakes $309,033.10
3 Friett hfriett2@dagondesign.com Vrouwelijke Zuid-Tier $461,664.44
4 Venmore tvenmore3@gmpg.org Vrouwelijke Centrum van New York $175,818.02
5 Sealeaf dsealeaf4@nps.gov Vrouwelijke Noorden van het Land, $126,690.15
8 Jursch ojursch7@utexas.edu Man Hudson Valley $663,821.09
6 Bezley fbezley5@lulu.com Man Mohawk Valley $366,733.78
7 uur gps ustanden6@geocities.jp Female Capital District $674,634.93

Wij typ de volgende opdracht om te proberen in te voegen bestand-3.txtto file-1.txt:

join file-1.txt file-3.txt

join meldt dat de zevende regel in file-3.txt is buiten de orde, het is dus niet verwerkt. Regel zeven is degene die begint met het cijfer zes, die zou moeten komen voor acht in een goed gesorteerde lijst. De zesde regel in het bestand (die begint met “8 Odell”) was de laatste verwerkt, en zo zien we de output voor.

U kunt gebruik maken van de –check-order optie als u wilt zien of join is blij met de sorteervolgorde van een bestanden—geen fuserende zal geprobeerd worden.

Om dit te doen, typt u het volgende:

join –check-bestellen file-1.txt file-3.txt

join vertelt u vooraf er is een probleem met de lijn zeven van bestand file-3.txt.

Bestanden met de Ontbrekende Lijnen

In file-4.txt de laatste regel is verwijderd, dus er is niet een regel acht. De inhoud is als volgt:

1 Varian avarian0@newyorker.com Vrouwelijke Western New York $535,304.73
2 Merrell nmerrell1@ted.com Vrouwelijke Finger Lakes $309,033.10
3 Friett hfriett2@dagondesign.com Vrouwelijke Zuid-Tier $461,664.44
4 Venmore tvenmore3@gmpg.org Vrouwelijke Centrum van New York $175,818.02
5 Sealeaf dsealeaf4@nps.gov Vrouwelijke Noorden van het Land, $126,690.15
6 Bezley fbezley5@lulu.com Man Mohawk Valley $366,733.78
7 uur gps ustanden6@geocities.jp Female Capital District $674,634.93

Wij typ de volgende opdracht en, verrassend, doe niet klagen en verwerkt alle lijnen kan:

join file-1.txt file-4.txt

De uitgang van de zeven lijsten samengevoegd lijnen.

De-a (print unpairable) optie vertelt join ook afdrukken van de lijnen die niet kon worden geëvenaard.

Hier typt u de volgende opdracht om te vertellen join afdrukken van de lijnen van een bestand dat niet kan worden gekoppeld aan de lijnen in bestand:

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

Zeven lijnen worden gekoppeld, en regel acht van bestand is gedrukt, ongeëvenaard. Er is geen informatie samengevoegd omdat file-4.txt niet bevatten een regel acht om het te kunnen aangepast worden. Echter, in ieder geval nog steeds wordt weergegeven in de uitvoer, zodat je weet dat het niet hebben van een match in file-4.txt.

Wij typ de volgende -v (onderdrukken toegetreden lijnen) opdracht te onthullen alle lijnen die niet aan een wedstrijd:

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

We zien dat de regel acht is het enige dat het niet hebben van een match in het bestand twee.

Bijpassende Andere Velden

Laten we overeenkomen met de twee nieuwe bestanden op een veld dat is niet de standaard (vak). Het volgende is de inhoud van file-7.txt:

avarian0@newyorker.com Vrouwelijke 192.57.150.231
dsealeaf4@nps.gov Vrouwelijke 210.53.81.212
fbezley5@lulu.com Man 72.173.218.75
hfriett2@dagondesign.com Vrouwelijke 33.167.32.89
nmerrell1@ted.com Vrouwelijke 22.198.121.181
ojursch7@utexas.edu Man 1.138.85.117
tvenmore3@gmpg.org Vrouwelijke 251.9.204.115
ustanden6@geocities.jp Vrouwelijke 4.204.0.237

En de volgende is de inhoud van file-8.txt:

Vrouw avarian0@newyorker.com Western New York $535,304.73
Vrouw dsealeaf4@nps.gov Noorden van het Land, $126,690.15
Man fbezley5@lulu.com Mohawk Valley $366,733.78
Vrouw hfriett2@dagondesign.com Zuid-Tier $461,664.44
Vrouw nmerrell1@ted.com Finger Lakes $309,033.10
Man ojursch7@utexas.edu Hudson Valley $663,821.09
Vrouw tvenmore3@gmpg.org het Centrum van New York $175,818.02
Vrouw ustanden6@geocities.jp Capital District $674,634.93

De enige verstandige veld dat u wilt gebruiken voor het samenvoegen is het e-mail adres, dat is in de praktijk een in het eerste bestand en veld twee in de tweede. Om dit op te vangen, kunnen we gebruik maken van de -1 (bestand één veld) en -2 (bestand twee veld) opties. We volgen deze met een getal dat aangeeft welk veld in elk bestand moet worden gebruikt voor het samenvoegen.

Wij typ het volgende te vertellen join gebruiken om het eerste veld in het bestand en de tweede in bestand:

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

De bestanden worden samengevoegd op het e-mail adres in, die wordt weergegeven als het eerste veld van elke regel in de uitvoer.

Met Behulp Van Verschillende Veldscheidingstekens

Wat als u bestanden met velden die worden gescheiden door witruimte?

De volgende twee bestanden worden door komma ‘ s gescheiden—de enige witruimte tussen de meerdere woorden plaatsnamen:

kat file-5.txt
kat file-6.txt

We kunnen gebruik maken van de -t (scheidingsteken) te vertellen deelnemen aan welk teken als het veld scheidingsteken. In dit geval is het de komma, zodat we typt u de volgende opdracht:

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

Alle lijnen zijn op elkaar afgestemd, en de ruimtes worden bewaard in de plaats namen.

Het Negeren Van Letters

Een ander bestand, file-9.txt is bijna identiek aan file-8.txt. Het enige verschil is dat sommige van de e-mail adressen met een hoofdletter, zoals hieronder weergegeven:

Vrouw avarian0@newyorker.com Western New York $535,304.73
Vrouw dsealeaf4@nps.gov Noorden van het Land, $126,690.15
Man Fbezley5@lulu.com Mohawk Valley $366,733.78
Vrouw hfriett2@dagondesign.com Zuid-Tier $461,664.44
Vrouw nmerrell1@ted.com Finger Lakes $309,033.10
Man Ojursch7@utexas.edu Hudson Valley $663,821.09
Vrouw tvenmore3@gmpg.org het Centrum van New York $175,818.02
Vrouw ustanden6@geocities.jp Capital District $674,634.93

Wanneer wij samen file-7.txt en file-8.txt het werkte perfect. Laten we zien wat er gebeurt met file-7.txt en file-9.txt.

We typt u de volgende opdracht:

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

Wij alleen overeenkomen met de zes lijnen. De verschillen in hoofd – en kleine letters voorkomen dat de andere twee e-mailadressen worden samengevoegd.

Echter, kunnen we gebruik je de-i (hoofdlettergevoelig) optie te dwingen mee te negeren die verschillen en overeenkomen met de velden die bevatten de dezelfde tekst, ongeacht het geval.

We typt u de volgende opdracht:

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

Alle acht lijnen zijn op elkaar afgestemd en trad met succes.

Mix en Match

In join, heb je een krachtige bondgenoot wanneer je worstelt met moeilijke opmaak van gegevens. Misschien heeft u nodig om de gegevens te analyseren, of misschien bent u probeert te masseren in vorm om een import uitvoert naar een ander systeem.

Geen kwestie wat de situatie ook is, je zult blij zijn dat u mee in uw hoek!

LEES VERDER

  • “Windows-10 de Nieuwe Update Is het Verwijderen van Mensen die de Bestanden Opnieuw
  • “Het Opslaan van een PDF op Je iPhone of iPad
  • “Het Oplossen van Bluetooth Problemen op Windows
  • “Wat Is Ambient Computing, en Hoe Zal Ons Leven Veranderen?
  • “6 Tips voor het Gebruik van Je iPhone’ s Nachts of in het Donker