GNU/Linux >> Znalost Linux >  >> Linux

Jak porovnat dva soubory a poté připojit řádek, který není částečnou shodou?

Snažím se porovnat dva soubory (Extensions.txt a Temp.txt ). Pokud existuje řádek, který částečně neodpovídá souboru Extensions.txt v Temp.txt Chtěl bych přidat chybějící řádek do Temp.txt .

Extensions.txt (Velmi základní, jeden sloupec):

111
1234
4321

Temp.txt :

1234/sip:[email protected]:5060  9421b96c5e   Avail   1.480
4321/sip:[email protected]:5060  e9b6b979a4   Avail   1.855

V podstatě to, co chci udělat, je najít shodu na základě všeho před / v prvním sloupci a pokud neexistuje žádná shoda, rád bych vytiskl neodpovídající řádek na konec souboru tak, aby to skončilo takto:

1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111

Zatím jsem zkoušel grep -v a nepřináší výsledky, které chci, zkusil jsem to také pomocí awk a zdá se, že to je správná cesta, ale úplně nerozumím tomu, jak awk funguje tak, aby produkoval odpovídající výsledky.

Přijatá odpověď:

Soubory můžete analyzovat pomocí awk

awk -F '/' '
    FNR == NR {seen[$1] = $0; next}
    {if ($1 in seen) print seen[$1]; else missing[$1]}
    END {for (x in missing) print x}
' Temp.txt Extensions.txt

Výstup:

1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111
  • Nastavte oddělovač polí na lomítko, -F '/'
  • Akce po FNR == NR se provede pro řádky prvního vstupního souboru. Řádky ukládáme do asociativního pole seen jako klíče a přejděte na next řádek.
  • Druhá akce se provede pro druhý soubor, když FNR != NR . Pokud se první pole shoduje, vytiskneme uložený řádek else uložíme pole do jiného pole missing .
  • Na END , vytiskneme chybějící řádky.

Linux
  1. Jak komprimovat a dekomprimovat soubory v Linuxu

  2. Jak spojit dva textové soubory v Linuxu

  3. Porovnat dva sloupce různých souborů a vytisknout, pokud se shodují?

  1. Jak porovnat tři soubory v Linuxu pomocí nástroje diff3

  2. Jak kopírovat soubory v Linuxu a Unixu? 10 cp Příklady příkazů

  3. Zřetězení souborů a vložení nového řádku mezi soubory

  1. Jak komprimovat soubory a adresáře v systému Linux (s příklady)

  2. Jak přidat čísla řádků do textových souborů v systému Linux

  3. Jak připojit více řádků k souboru?