GNU/Linux >> Znalost Linux >  >> Linux

Jak získat rozdíl (pouze doplňky) mezi dvěma soubory v linuxu

diff a poté grep pro požadovaný typ úprav.

diff -u A1 A2 | grep -E "^\+"

Podobný přístup jako https://stackoverflow.com/a/15385080/337172, ale doufejme, že je srozumitelnější a snadno vyladitelný:

diff \
  --new-line-format="%L" \
  --old-line-format="" \
  --unchanged-line-format="" \
  A1 A2

Většina níže uvedených je zkopírována přímo z odpovědi serveru @TomOnTime zde. Ve spodní části je pokus, který funguje na netříděných souborech, ale příkaz třídí soubory před zadáním rozdílu, takže v mnoha případech to nebude to, co je žádoucí. Pro dobře naformátované rozdíly netříděných souborů mohou být užitečné další odpovědi (díky @Fritz za upozornění):

Zobrazit řádky, které existují pouze v souboru a:(tj. co bylo smazáno z a)

comm -23 a b

Zobrazit řádky, které existují pouze v souboru b:(tj. co bylo přidáno do b)

comm -13 a b

Zobrazit řádky, které existují pouze v jednom nebo druhém souboru:(ale ne v obou)

comm -3 a b | sed 's/^\t//'

(Upozornění:Pokud soubor a má řádky, které začínají TAB, bude (první TAB) z výstupu odstraněn.)

POZNÁMKA:Aby "komunikace" fungovala správně, musí být oba soubory seřazeny. Pokud ještě nejsou seřazeny, měli byste je seřadit:

sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted

Pokud jsou soubory extrémně dlouhé, může to být docela zátěž, protože to vyžaduje další kopii a tedy dvakrát tolik místa na disku.

Edit:všimněte si, že příkaz lze napsat stručněji pomocí substituce procesu (díky @phk za komentář):

comm -12 <(sort < a) <(sort < b)

Můžete to zkusit

diff --changed-group-format='%>' --unchanged-group-format='' A1 A2

Možnosti jsou popsány v man diff :

       --GTYPE-group-format=GFMT
              format GTYPE input groups with GFMT

a:

       LTYPE is 'old', 'new', or 'unchanged'.
              GTYPE is LTYPE or 'changed'.

a:

              GFMT (only) may contain:

       %<     lines from FILE1

       %>     lines from FILE2

       [...]

Linux
  1. Jak přenášet soubory mezi dvěma počítači pomocí příkazů nc a pv

  2. Jak spojit dva textové soubory v Linuxu

  3. Jak najít všechny řídké soubory v Linuxu

  1. Linux – Jak smazat soubory vytvořené mezi dvěma časy?

  2. Jak používat Linuxový příkaz find k hledání souborů

  3. Jak provedu binární rozdíl na dvou stejně velkých souborech pod Linuxem?

  1. Jak zjistím rozdíl mezi dvěma daty pod bash

  2. Jak mohu porovnat dva soubory XML?

  3. Jak porovnat pouze první řádek dvou souborů?