komm
Originalförfattare | Lee E. McMahon |
---|---|
Utvecklare | AT&T Bell Laboratories , Richard Stallman , David MacKenzie |
Initial release | november 1973 |
Skrivet i | C |
Operativ system | Unix , Unix-liknande , Plan 9 , Inferno |
Plattform | Cross-plattform |
Typ | Kommando |
Licens |
coreutils : GPLv3+ Plan 9: MIT-licens |
Kommandot comm i Unix -familjen av datoroperativsystem är ett verktyg som används för att jämföra två filer för gemensamma och distinkta linjer. comm anges i POSIX -standarden. Det har varit allmänt tillgängligt på Unix-liknande operativsystem sedan mitten till slutet av 1980-talet.
Historia
Skrivet av Lee E. McMahon , comm dök först upp i version 4 Unix .
Versionen av comm som finns i GNU coreutils skrevs av Richard Stallman och David MacKenzie.
Användande
comm läser två filer som indata, betraktade som textrader. comm matar ut en fil, som innehåller tre kolumner. De två första kolumnerna innehåller rader som är unika för den första respektive andra filen. Den sista kolumnen innehåller linjer som är gemensamma för båda. Detta liknar funktionellt diff .
Kolumner särskiljs vanligtvis med tecknet <tab> . Om indatafilerna innehåller rader som börjar med separatortecknet kan utdatakolumnerna bli tvetydiga.
För effektivitetens skull förväntar sig standardimplementeringar av comm att båda indatafilerna sekvenseras i samma radsorteringsordning, sorterade lexikalt. Kommandot sort (Unix) kan användas för detta ändamål.
Comm - algoritmen använder sig av sorteringssekvensen för det aktuella språket . Om raderna i filerna inte båda är sorterade i enlighet med den aktuella lokalen är resultatet odefinierat.
Returkod
Till skillnad från diff har returkoden från comm ingen logisk betydelse när det gäller förhållandet mellan de två filerna. En returkod på 0 indikerar framgång, en returkod >0 indikerar att ett fel inträffade under bearbetningen.
Exempel
$ cat foo äpple banan aubergine $ cat bar äpple banan banan zucchini $ comm foo bar äpple banan banan aubergine zucchini
Detta visar att båda filerna har en banan, men bara baren har en andra banan.
Mer detaljerat har utdatafilen det utseende som följer. Observera att kolumnen tolkas av antalet inledande tabbtecken. \t representerar ett tabbtecken och \n representerar en nyrad ( Escape-tecken#Programmering och dataformat ) .
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | \t | \t | a | sid | sid | l | e | \n | ||
1 | \t | \t | b | a | n | a | n | a | \n | |
2 | \t | b | a | n | a | n | a | \n | ||
3 | e | g | g | sid | l | a | n | t | \n | |
4 | \t | z | u | c | c | h | i | n | i | \n |
Jämförelse med diff
Generellt sett är diff ett kraftfullare verktyg än comm . Den enklare comm är bäst lämpad för användning i skript.
Den primära skillnaden mellan comm och diff är att comm förkastar information om ordningen på raderna före sortering.
En mindre skillnad mellan comm och diff är att comm inte kommer att försöka indikera att en rad har "ändrats" mellan de två filerna; linjer visas antingen i kolumnerna "från fil #1", "från fil #2" eller "i båda". Detta kan vara användbart om man vill att två rader ska betraktas som olika även om de bara har subtila skillnader.
Andra alternativ
comm har kommandoradsalternativ för att undertrycka någon av de tre kolumnerna. Detta är användbart för skript.
Det finns också ett alternativ att läsa en fil (men inte båda) från standardinmatning.
Gränser
Upp till en hel rad måste buffras från varje indatafil under linjejämförelse, innan nästa utdatarad skrivs.
Vissa implementeringar läser rader med funktionen readlinebuffer() som inte sätter några radlängdsgränser om systemminnet räcker till.
Andra implementeringar läser rader med funktionen fgets () . Denna funktion kräver en fast buffert. För dessa implementeringar är bufferten ofta dimensionerad enligt POSIX- makrot LINE_MAX .
Se även
- Jämförelse av filjämförelseverktyg
- Lista över Unix-kommandon
- cmp (Unix) – teckenorienterad filjämförelse
- cut (Unix) – dela upp kolumnorienterade filer
externa länkar
- The Single UNIX Specification , Version 4 från The Open Group : välj eller avvisa rader som är gemensamma för två filer – Shell and Utilities Reference,
- Plan 9 Programmerarmanual, volym 1 –
- Inferno General Commands Manual –