join(1p)
NAMN
join — relationsdatabasoperator
SYNOPSIS
join [-a filnummer|-v filnummer] [-e sträng] [-o lista] [-t tecken]
[-1 fält] [-2 fält] fil1 fil2
BESKRIVNING
Verktyget join utför en likhetskoppling mellan filerna fil1 och fil2. De sammanfogade filerna skrivs till standard ut.
Kopplingsfältet är ett fält i varje fil som filerna jämförs efter. Verktyget join skriver en rad i utdata för varje par av rader i fil1 och fil2 där kopplingsfälten sorterar lika. Standardutdata består av kopplingsfältet, därefter återstående fält från fil1, och därefter återstående fält från fil2. Detta format kan ändras med flaggan -o (se nedan). Flaggan -a kan användas för att lägga till omatchade rader i utdata. Flaggan -v kan användas för att endast skriva ut omatchade rader.
Filerna fil1 och fil2 ska vara ordnade enligt sorteringsordningen för sort -b på de fält som de ska kopplas på, som standard det första fältet i varje rad. All vald utdata ska skrivas i samma sorteringsordning.
Standardavgränsare för indatafält är <blank>-tecken. I detta fall räknas flera avgränsare som en enda fältavgränsare, och inledande avgränsare ignoreras. Standardavgränsare för utdatafält är ett <space>-tecken.
Fältavgränsaren och sorteringsordningen kan ändras med flaggan -t (se nedan).
Om samma nyckel förekommer mer än en gång i någon av filerna skrivs alla kombinationer av de återstående fälten i fil1 och de återstående fälten i fil2 ut, i den ordning raderna påträffas.
Om indatafilerna inte ligger i rätt sorteringsordning är resultaten ospecificerade.
FLAGGOR
Verktyget join ska följa Base Definitions-volymen av POSIX.1-2017, avsnitt 12.2, Utility Syntax Guidelines.
Följande flaggor ska stödjas:
-a filnummer
- Skapa en rad för varje rad som inte kan paras ihop i fil filnummer, där filnummer är 1 eller 2, utöver standardutdata. Om både -a 1 och -a 2 anges ska alla rader som inte kan paras ihop skrivas ut.
-e sträng
- Ersätt tomma utdatafält i listan som väljs av -o med strängen sträng.
-o lista
- Konstruera utdataraden så att den består av de fält som anges i lista. Varje element i listan ska ha någon av följande två former:
filnummer.fält 0
- I formen filnummer.fält är filnummer ett filnummer och fält ett decimalt heltal som anger fältnummer. Värdet 0 (noll) representerar kopplingsfältet.
- Elementen i lista ska vara separerade antingen med <comma> eller med <blank>, enligt riktlinje 8 i Base Definitions-volymen av POSIX.1-2017, avsnitt 12.2, Utility Syntax Guidelines. De fält som anges av lista ska skrivas för alla valda utdatarader. Fält som väljs av lista men inte förekommer i indata ska behandlas som tomma utdatafält. Se flaggan -e. Endast uttryckligen begärda fält ska skrivas. Programmet/användaren ska se till att lista är ett enda kommandoradsargument.
-t tecken
- Använd tecknet tecken som avgränsare för både indata och utdata. Varje förekomst av tecken i en rad ska vara betydelsefull. När denna flagga anges ska sorteringsordningen vara densamma som för sort utan flaggan -b.
-v filnummer
- I stället för standardutdata, skapa en rad endast för varje rad som inte kan paras ihop i filnummer, där filnummer är 1 eller 2. Om både -v 1 och -v 2 anges ska alla rader som inte kan paras ihop skrivas ut.
-1 fält
- Koppla på det fält:te fältet i fil 1. Fält anges som decimala heltal med början på 1.
-2 fält
- Koppla på det fält:te fältet i fil 2. Fält anges som decimala heltal med början på 1.
OPERANDER
Följande operander ska stödjas:
fil1, fil2
- Sökväg till en fil som ska kopplas. Om någon av operanderna fil1 eller fil2 är - ska standard in användas i dess ställe.
STANDARD IN
Standard in ska endast användas om operanden fil1 eller fil2 är -. Se avsnittet INDATAFILER.
INDATAFILER
Indatafilerna ska vara textfiler.
MILJÖVARIABLER
Följande miljövariabler ska påverka körningen av join:
LANG
- Anger ett standardvärde för internationaliseringsvariabler som är osatta eller tomma. Se Base Definitions-volymen av POSIX.1-2017, avsnitt 8.2, Internationalization Variables, för prioritetsordningen för internationaliseringsvariabler som används för att bestämma värdena för lokalkategorier.
LC_ALL
- Om satt till ett icke-tomt strängvärde, åsidosätts värdena för alla övriga internationaliseringsvariabler.
LC_COLLATE
- Bestämmer den lokal för sorteringsordningen som join förväntar sig har använts när indatafilerna sorterades.
LC_CTYPE
- Bestämmer lokalen för tolkning av byteföljder i textdata som tecken, till exempel enkelbyte- kontra flerbytetecken i argument och indatafiler.
LC_MESSAGES
- Bestämmer den lokal som ska användas för att påverka format och innehåll i diagnostiska meddelanden som skrivs till standard fel.
NLSPATH
- Bestämmer platsen för meddelandekataloger för behandling av LC_MESSAGES.
ASYNKRONA HÄNDELSER
Standard.
STANDARD UT
Utdata från join ska vara en sammanfogning av valda teckenfält. När flaggan -o inte anges ska utdata vara:
"%s%s%s\n", <kopplingsfält>, <övriga fält från fil1>,
<övriga fält från fil2>
Om kopplingsfältet inte är det första fältet i en fil ska <övriga fält från filen> för den filen vara:
<fält före kopplingsfältet>, <fält efter kopplingsfältet>
När flaggan -o anges ska utdataformatet vara:
"%s\n", <sammanfogning av fält>
Där sammanfogningen av fält beskrivs av flaggan -o ovan.
För båda formaten ska varje fält, utom det sista, skrivas med sitt efterföljande avgränsartecken. Om avgränsaren är standardvärdet (<blank>-tecken), ska ett enda <space>-tecken skrivas efter varje fält, utom det sista.
STANDARD FEL
Standard fel ska endast användas för diagnostiska meddelanden.
UTFILER
Inga.
UTÖKAD BESKRIVNING
Ingen.
SLUTSTATUS
Följande slutvärden ska returneras:
0
- Alla indatafiler skrevs ut korrekt.
>0
- Ett fel inträffade.
KONSEKVENSER AV FEL
Standard.
Följande avsnitt är informativa.
ANVÄNDNING I PROGRAM
Sökvägar som består av numeriska siffror eller har formen sträng.sträng bör inte anges direkt efter -o-listan.
Om sorteringsordningen i aktuell lokal inte har en total ordning för alla tecken (se Base Definitions-volymen av POSIX.1-2017, avsnitt 7.3.2, LC_COLLATE), behandlar join fält som sorterar lika men inte är identiska som samma. Om detta beteende inte önskas kan det undvikas genom att tvinga användning av POSIX-lokalen, även om detta innebär att indatafilerna måste sorteras om enligt POSIX-lokalens sorteringsordning.
När join används för att behandla sökvägar rekommenderas det att LC_ALL, eller åtminstone LC_CTYPE och LC_COLLATE, sätts till POSIX eller C i miljön. Sökvägar kan innehålla byteföljder som inte bildar giltiga tecken i vissa lokaler, vilket annars skulle göra verktygets beteende odefinierat. I POSIX-lokalen är varje byte ett giltigt enkelbytetecken, och därför undviks problemet.
EXEMPEL
Fältet -o 0 väljer i praktiken unionen av kopplingsfälten. Givet filen phone:
!Name Phone Number Don +1 123-456-7890 Hal +1 234-567-8901 Yasushi +2 345-678-9012
Och filen fax:
!Name Fax Number Don +1 123-456-7899 Keith +1 456-789-0122 Yasushi +2 345-678-9011
Där de stora mängderna blanktecken är avsedda att representera ett enda <tab>-tecken, skulle kommandot:
join -t "<tab>" -a 1 -a 2 -e '(unknown)' -o 0,1.2,2.2 phone fax
Där <tab> är ett bokstavligt <tab>-tecken, producera:
!Name Phone Number Fax Number Don +1 123-456-7890 +1 123-456-7899 Hal +1 234-567-8901 (unknown) Keith (unknown) +1 456-789-0122 Yasushi +2 345-678-9012 +2 345-678-9011
Flera förekomster av samma nyckel ger kombinatoriska resultat. Följande:
fa:
a x
a y
a z
fb:
a p
Ger:
a x p a y p a z p
Och följande:
fa:
a b c
a d e
fb:
a w x
a y z
a o p
Ger:
a b c w x a b c y z a b c o p a d e w x a d e y z a d e o p
BAKGRUND OCH MOTIVERING
Flaggan -e är endast verksam när den används tillsammans med -o, eftersom join inte vet vilka fält som kan vara tomma om inte specifika fält identifieras med -o. Undantaget är kopplingsfältet, men att identifiera ett tomt kopplingsfält med strängen från -e är inte historisk praxis, och vissa skript skulle kunna gå sönder om detta ändrades.
Fältet 0 i -o-listan antogs från tionde utgåvans version av join för att tillmötesgå internationella invändningar mot att join i grunddokumenten för IEEE Std 1003.2-1992 inte stödde den ”full join” eller ”outer join” som beskrivs i litteratur om relationsdatabaser. Även om det har varit möjligt att inkludera ett kopplingsfält i utdata, antingen som standard eller via fältnummer med -o, kunde kopplingsfältet inte inkluderas för en oparad rad vald med -a. Fältet -o 0 väljer i praktiken unionen av kopplingsfälten.
Denna typ av yttre koppling var inte möjlig med join-kommandona i grunddokumenten för IEEE Std 1003.2-1992. Fältet -o 0 valdes eftersom det är en uppåtkompatibel ändring för program. Ett alternativ övervägdes: att låta kopplingsfältet representera unionen av fälten i filerna, där de är identiska för matchade rader och ett eller båda är tomma för omatchade rader. Detta antogs inte eftersom det skulle bryta vissa historiska program.
Möjligheten att ange fil2 som - är inte historisk praxis; den lades till för fullständighet.
Flaggan -v är inte historisk praxis, men ansågs nödvändig eftersom den gör det möjligt att skriva endast de rader som inte matchar på kopplingsfältet, i motsats till flaggan -a, som skriver både rader som matchar och rader som inte matchar. Denna ytterligare funktion motsvarar flaggan -v i grep.
Vissa historiska implementationer har påträffats där en tom rad i en av indatafilerna betraktades som filslut. Beskrivningen i denna volym av POSIX.1-2017 anger inte detta som ett tillåtet fall.
Tidigare versioner av denna standard tillät flaggorna -j, -j1, -j2 och en form av flaggan -o som tillät att listargumentet lista gavs som flera argument. Dessa former specificeras inte längre av POSIX.1-2008, men kan förekomma i vissa implementationer.
FRAMTIDA RIKTNING
Ingen.
SE ÄVEN
awk(1p), comm(1p), sort(1p), uniq(1p)
Base Definitions-volymen av POSIX.1-2017, avsnitt 7.3.2, LC_COLLATE, kapitel 8, Environment Variables, avsnitt 12.2, Utility Syntax Guidelines.
UPPHOVSRÄTT
Delar av denna text är återtryckta och återgivna i elektronisk form från IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, 2018 Edition, Copyright (C) 2018 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. Vid avvikelse mellan denna version och den ursprungliga standarden från IEEE och The Open Group är den ursprungliga standarden det avgörande dokumentet. Den ursprungliga standarden kan hämtas online på:
http://www.opengroup.org/unix/online.html
Eventuella typografiska eller formateringsfel som förekommer på denna sida har sannolikt införts vid konverteringen av källfilerna till manualsidesformat. För att rapportera sådana fel, se:
https://www.kernel.org/doc/man-pages/reporting_bugs.html
Sidor som hänvisar till denna sida
Sidslut
Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/join.1p.html
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
Tack till Datorhjälp hemma som har sponsrat Linux.se med webbhotell.