komm - comm

komm
Eredeti szerző (k) Lee E. McMahon
Fejlesztő (k) AT&T Bell Laboratories , Richard Stallman , David MacKenzie
Első kiadás 1973. november ; 47 évvel ezelőtt ( 1973-11 )
Operációs rendszer Unix , Unix-szerű , 9. terv , Inferno
Felület Többplatformos
típus Parancs
Engedély coreutils : GPLv3+

A számítógépes operációs rendszerek Unix családjában található Comm parancs egy segédprogram, amely két fájl összehasonlítására szolgál a közös és a különálló sorokhoz. comm a POSIX szabványban van megadva . A nyolcvanas évek közepe és vége óta széles körben elérhető Unix-szerű operációs rendszereken.

Történelem

Lee E. McMahon írta , a comm először a Unix 4 -es verzióban jelent meg .

A GNU coreutils -ban csomagolt comm verzióját Richard Stallman és David MacKenzie írta .

Használat

A com két fájlt olvas be bemenetként, szövegsoroknak tekintve. comm egy fájlt ad ki, amely három oszlopot tartalmaz. Az első két oszlop az első és a második fájl egyedi sorait tartalmazza. Az utolsó oszlop mindkettőhöz hasonló sorokat tartalmaz. Ez funkcionálisan hasonló a diff .

Az oszlopokat általában a <tab> karakterrel különböztetjük meg. Ha a bemeneti fájlok elválasztó karakterrel kezdődő sorokat tartalmaznak, a kimeneti oszlopok kétértelművé válhatnak.

A hatékonyság, az alapértelmezésben a kommunikációs várják a bemeneti fájlok szekvenálni ugyanabban a sorban egybevetés érdekében, válogatni lexikailag. A sort (Unix) parancs használható erre a célra.

A komm algoritmus kihasználja az aktuális területi beállítások szortírozási sorrendjét . Ha a fájlok sorai nincsenek összegyűjtve az aktuális területi beállításoknak megfelelően, az eredmény nem definiált.

Visszatérési kód

A diff -tól eltérően a comm visszatérési kódjának nincs logikai jelentősége a két fájl kapcsolatát illetően. A 0 visszatérési kód a sikert jelzi, a> 0 visszatérési kód a feldolgozás során történt hibát.

Példa

$ cat foo
apple
banana
eggplant
$ cat bar
apple
banana
banana
zucchini
$ comm foo bar
                  apple
                  banana
          banana
eggplant
          zucchini

Ez azt mutatja, hogy mindkét fájlban van egy banán, de csak a bárban van egy második banán.

Részletesebben a kimeneti fájl az alábbi megjelenéssel rendelkezik. Ne feledje, hogy az oszlopot a vezető lapkarakterek száma értelmezi. \ t egy tabulátor karaktert és \ n egy új sort jelent ( Escape karakter#Programozás és adatformátumok ).

0 1 2 3 4 5 6 7 8 9
0 \ t \ t a o o 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 o l a n t \ n
4 \ t z u c c h én n én \ n

Összehasonlítás a diff

Általánosságban elmondható, hogy a diff erősebb segédprogram, mint a komm . Az egyszerűbb comm a legmegfelelőbb szkriptekben való használatra.

Az elsődleges különbség a comm és a diff között az, hogy a comm elveti a sorok rendezés előtti adatait.

Kisebb különbség a comm és a diff között az, hogy a comm nem próbálja jelezni, hogy egy sor "megváltozott" a két fájl között; sorok vagy az "1. fájlból", "a 2. fájlból" vagy a "mindkét" oszlopban láthatók. Ez akkor lehet hasznos, ha azt kívánja, hogy két sort különbözõnek tekintsenek, még akkor is, ha csak finom eltérések vannak.

Egyéb opciók

A Comm rendelkezik parancssori beállításokkal a három oszlop bármelyikének elnyomására. Ez hasznos a szkriptekhez.

Lehetőség van egy fájl (de nem mindkettő) szabványos bemenetről történő olvasására.

Korlátok

A sorok összehasonlítása során minden soros bemeneti fájlból legfeljebb egy teljes sort kell pufferelni, mielőtt a következő kimeneti sort írnánk.

Egyes implementációk a readlinebuffer () függvénnyel olvassák a sorokat, ami nem ír elő sorhossz -korlátot, ha a rendszermemória elegendő.

Más megvalósítások sorokat olvasnak az fgets () függvénnyel . Ez a funkció rögzített puffert igényel. Ezeknél a megvalósításoknál a puffert gyakran a LINE_MAX POSIX makró szerint méretezik .

Lásd még

Hivatkozások

Külső linkek