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 poleseen
jako klíče a přejděte nanext
řádek. - Druhá akce se provede pro druhý soubor, když
FNR != NR
. Pokud se první pole shoduje, vytiskneme uložený řádekelse
uložíme pole do jiného polemissing
. - Na
END
, vytiskneme chybějící řádky.
Jak vytvořit adresáře pouze pro výstup stromu?
Přijmout signál, než je proces zabit Oom Killer / Cgroups?