GNU/Linux >> Znalost Linux >  >> Linux

Nástroj pro získání řádků v jednom souboru, které nejsou v jiném?

Existuje nějaký nástroj, který dokáže získat řádky, které soubor A obsahuje, ale soubor B nikoli? Mohl bych vytvořit malý jednoduchý skript, např. pomocí perlu, ale pokud už něco takového existuje, ušetřím si odteď čas.

Přijatá odpověď:

Ano. Standardní grep nástroj pro vyhledávání textových řetězců v souborech lze použít k odečtení všech řádků v jednom souboru od druhého.

grep -F -x -v -f fileB fileA

Funguje to tak, že se každý řádek v souboru B použije jako vzor (-f fileB ) a považovat jej za prostý řetězec, který se má shodovat (nikoli běžný regulární výraz) (-F ). Vynutíte shodu na celém řádku (-x ) a vytiskněte pouze řádky, které se neshodují (-v ). Proto tisknete řádky v souboru A, které neobsahují stejná data jako kterýkoli řádek v souboru B.

Nevýhodou tohoto řešení je, že nebere v úvahu pořadí řádků, a pokud váš vstup obsahuje duplicitní řádky na různých místech, nemusíte dostat to, co očekáváte. Řešením je použít skutečný porovnávací nástroj, jako je diff . Můžete to udělat vytvořením souboru rozdílu s hodnotou kontextu na 100 % řádků v souboru a jeho analýzou pouze pro řádky, které by byly odstraněny při převodu souboru A na soubor B. (Všimněte si také tohoto příkazu odstraní formátování rozdílu poté, co dostane správné řádky.)

diff -U $(wc -l < fileA) fileA fileB | sed -n 's/^-//p' > fileC

Linux
  1. Funkce cloudových serverů Rackspace, které nejsou dostupné na Fortigate-VM

  2. Jak mohu použít řádky souboru jako argumenty příkazu?

  3. Hledání obsahu jednoho souboru v jiném souboru

  1. Jak získám absolutní adresář souboru v bash?

  2. Jak získat pouze počet řádků souboru

  3. Jak získat MAC adresy zařízení, která nejsou v síti

  1. 8 strašidelných příkazů, které pronásledují terminál

  2. Změňte pořadí řádků v souboru

  3. Jak získat fyzickou velikost souboru v Linuxu?