comm(1p): Skillnad mellan sidversioner
Admin (diskussion | bidrag) |
Admin (diskussion | bidrag) (→Sidfot) |
||
| Rad 260: | Rad 260: | ||
* https://www.kernel.org/doc/man-pages/reporting_bugs.html | * https://www.kernel.org/doc/man-pages/reporting_bugs.html | ||
== Sidor som hänvisar till denna sida == | == Sidor som hänvisar till denna sida == | ||
Versionen från 6 maj 2026 kl. 09.39
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)