comm(1p)

Från Wiki.linux.se -Linux wikipedia på Svenska.
Hoppa till navigering Hoppa till sök

comm(1p) – Linux manualsida

Prolog

Den här manualsidan är en del av POSIX Programmer's Manual.

Linux-implementationen av detta gränssnitt kan skilja sig åt. Se motsvarande Linux-manualsida för detaljer om Linux-beteende. Gränssnittet kanske inte heller är implementerat på Linux.

Namn

comm – välj eller uteslut rader som är gemensamma för två filer.

Synopsis

comm [-123] fil1 fil2

Beskrivning

Verktyget comm ska läsa fil1 och fil2, som bör vara sorterade enligt den aktuella sorteringsordningen, och skapa tre textkolumner som utdata:

  • rader som endast finns i fil1
  • rader som endast finns i fil2
  • rader som finns i båda filerna

Om raderna i båda filerna inte är sorterade enligt sorteringsordningen för aktuell lokal är resultaten ospecificerade.

Om sorteringsordningen för aktuell lokal inte har en total ordning för alla tecken, se POSIX.1-2017, Base Definitions, avsnitt 7.3.2, LC_COLLATE, och några rader från indatafilerna sorteras lika men inte är identiska, bör comm behandla dem som olika rader men kan behandla dem som samma.

Om comm behandlar dem som olika, bör verktyget förvänta sig att de är sorterade enligt en ytterligare byte-för-byte-jämförelse med sorteringsordningen för POSIX-lokalen. Om de inte är sorterade på detta sätt kan utdata från comm identifiera sådana rader som både unika för fil1 och unika för fil2, i stället för att identifiera dem som förekommande i båda filerna.

Flaggor

Verktyget comm ska följa POSIX.1-2017, Base Definitions, avsnitt 12.2, Utility Syntax Guidelines.

Följande flaggor ska stödjas:

-1
Undertryck utdatakolumnen med rader som är unika för fil1.
-2
Undertryck utdatakolumnen med rader som är unika för fil2.
-3
Undertryck utdatakolumnen med rader som förekommer i både fil1 och fil2.

Operander

Följande operander ska stödjas:

fil1
En sökväg till den första filen som ska jämföras.
Om fil1 är - ska standardinmatning användas.
fil2
En sökväg till den andra filen som ska jämföras.
Om fil2 är - ska standardinmatning användas.

Om både fil1 och fil2 hänvisar till standardinmatning, eller till samma FIFO-specialfil, blockspecialfil eller teckenspecialfil, är resultaten odefinierade.

Standardinmatning

Standardinmatning ska endast användas om någon av operanderna fil1 eller fil2 hänvisar till standardinmatning.

Se avsnittet Indatafiler.

Indatafiler

Indatafilerna ska vara textfiler.

Miljövariabler

Följande miljövariabler ska påverka körningen av comm:

LANG
Anger ett standardvärde för internationaliseringsvariabler som är osatta eller tomma.
Se POSIX.1-2017, Base Definitions, avsnitt 8.2, Internationalization Variables, för företrädesordningen för internationaliseringsvariabler som används för att bestämma värden för lokalkategorier.
LC_ALL
Om den är satt till en icke-tom sträng åsidosätter den värdena för alla andra internationaliseringsvariabler.
LC_COLLATE
Bestämmer lokalen för den sorteringsordning som comm förväntar sig att indatafilerna har sorterats med.
LC_CTYPE
Bestämmer lokalen för tolkning av byteföljder i textdata som tecken, till exempel enkelbyte- jämfört med multibytetecken i argument och indatafiler.
LC_MESSAGES
Bestämmer lokalen som ska användas för att påverka formatet och innehållet i diagnostiska meddelanden som skrivs till standardfel.
NLSPATH
Bestämmer platsen för meddelandekataloger vid bearbetning av LC_MESSAGES.

Asynkrona händelser

Standardbeteende.

Standardutmatning

Verktyget comm ska skapa utdata beroende på vilka flaggor som valts.

Om flaggorna -1, -2 och -3 alla är valda ska comm inte skriva något till standardutmatning.

Om flaggan -1 inte är vald ska rader som endast finns i fil1 skrivas med formatet:

"%s\n", <rad i fil1>

Om flaggan -2 inte är vald ska rader som endast finns i fil2 skrivas med formatet:

"%s%s\n", <inledning>, <rad i fil2>

där strängen inledning är följande:

<tabb>
Flaggan -1 är inte vald.
tom sträng
Flaggan -1 är vald.

Om flaggan -3 inte är vald ska rader som finns i båda filerna skrivas med formatet:

"%s%s\n", <inledning>, <rad i båda>

där strängen inledning är följande:

<tabb><tabb>
Varken flaggan -1 eller -2 är vald.
<tabb>
Exakt en av flaggorna -1 och -2 är vald.
tom sträng
Både flaggan -1 och -2 är valda.

Om indatafilerna var sorterade enligt sorteringsordningen för aktuell lokal ska de skrivna raderna vara i sorteringsordningen för aktuell lokal.

Om indatafilerna innehöll rader som sorterades lika men inte var identiska, och dessa rader inom varje fil var sorterade enligt en ytterligare byte-för-byte-jämförelse med sorteringsordningen för POSIX-lokalen, och comm behandlade dem som olika rader, bör skrivna rader som sorteras lika men inte är identiska sorteras enligt en ytterligare byte-för-byte-jämförelse med sorteringsordningen för POSIX-lokalen.

Standardfel

Standardfel ska endast användas för diagnostiska meddelanden.

Utdatafiler

Inga.

Utökad beskrivning

Ingen.

Avslutningsstatus

Följande avslutningsvärden ska returneras:

0
Alla indatafiler skrevs ut korrekt enligt specifikationen.
>0
Ett fel inträffade.

Följder av fel

Standardbeteende.

Följande avsnitt är informativa.

Programanvändning

Om indatafilerna inte är korrekt försorterade kanske utdata från comm inte är användbar.

När comm används för att bearbeta sökvägar rekommenderas 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 detta problem.

Om sorteringsordningen för aktuell lokal inte har en total ordning för alla tecken kan detta påverka beteendet hos comm på följande sätt:

  • Om comm behandlar rader som samma endast om de är identiska, kan vissa rader felaktigt identifieras som både unika för fil1 och unika för fil2.
  • Om comm behandlar rader som samma om de sorteras lika, och en rad från fil1 sorteras lika med en rad från fil2 men inte är identisk med den, kan en av raderna felaktigt identifieras som förekommande i båda filerna medan den andra inte skrivs ut alls.

Sådana problem kan undvikas genom att tvinga användning av POSIX-lokalen. Följande exempel identifierar rader som finns i både fil1 och fil2:

LC_ALL=POSIX sort file1 > file1.posix
LC_ALL=POSIX sort file2 > file2.posix
LC_ALL=POSIX comm -12 file1.posix file2.posix | sort

Den sista sort sorterar om utdata från comm enligt sorteringsordningen för den ursprungliga lokalen. Detta kan vara svårt om mer än en kolumn skrivs ut och inledande blanktecken inte kan ignoreras.

Exempel

Om en fil med namnet xcu innehåller en sorterad lista över verktygen i denna volym av POSIX.1-2017, en fil med namnet xpg3 innehåller en sorterad lista över verktygen som specificeras i X/Open Portability Guide, Issue 3, och en fil med namnet svid89 innehåller en sorterad lista över verktygen i System V Interface Definition Third Edition:

comm -23 xcu xpg3 | comm -23 - svid89

skulle detta skriva en lista över verktyg i denna volym av POSIX.1-2017 som inte specificeras av något av de andra dokumenten.

comm -12 xcu xpg3 | comm -12 - svid89

skulle skriva en lista över verktyg som specificeras av alla tre dokumenten.

comm -12 xpg3 svid89 | comm -23 - xcu

skulle skriva en lista över verktyg som specificeras av både XPG3 och SVID, men inte specificeras i denna volym av POSIX.1-2017.

Bakgrund

Ingen.

Framtida riktning

En framtida version av denna standard kan kräva att om några rader från indatafilerna sorteras lika men inte är identiska, ska comm behandla dem som olika rader och förvänta sig att de är sorterade enligt en ytterligare byte-för-byte-jämförelse med sorteringsordningen för POSIX-lokalen.

En framtida version av denna standard kan kräva att om indatafilerna innehöll rader som sorterades lika men inte var identiska, och dessa rader inom varje fil var sorterade enligt en ytterligare byte-för-byte-jämförelse med sorteringsordningen för POSIX-lokalen, ska skrivna rader som sorteras lika men inte är identiska sorteras enligt en ytterligare byte-för-byte-jämförelse med sorteringsordningen för POSIX-lokalen.

Se även

  • cmp(1p)
  • diff(1p)
  • sort(1p)
  • uniq(1p)
  • POSIX.1-2017, Base Definitions, avsnitt 7.3.2, LC_COLLATE
  • POSIX.1-2017, Base Definitions, kapitel 8, Environment Variables
  • POSIX.1-2017, Base Definitions, avsnitt 12.2, Utility Syntax Guidelines

Upphovsrätt

Delar av denna text är återgivna och reproducerade 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 © 2018 Institute of Electrical and Electronics Engineers, Inc. och The Open Group.

Vid avvikelse mellan denna version och den ursprungliga IEEE- och The Open Group-standarden gäller den ursprungliga standarden som referensdokument.

Den ursprungliga standarden kan hämtas online från:

Eventuella typografiska fel eller formateringsfel på denna sida har troligen införts vid konverteringen av källfilerna till man-sideformat.

För att rapportera sådana fel, se:

Sidor som hänvisar till denna sida

  • cmp(1p)
  • diff(1p)
  • join(1p)
  • sort(1p)
  • uniq(1p)