join(1p)

Från Wiki.linux.se -Linux wikipedia på Svenska.
Version från den 28 maj 2026 kl. 06.42 av Admin (diskussion | bidrag) (Skapade sidan med '{{DISPLAYTITLE:join(1p)}} == NAMN == '''join''' — relationsdatabasoperator == SYNOPSIS == <pre> join [-a filnummer|-v filnummer] [-e sträng] [-o lista] [-t tecken] [-1 fält] [-2 fält] fil1 fil2 </pre> == 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...')
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök


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

sort(1p)

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.