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 == NRse provede pro řádky prvního vstupního souboru. Řádky ukládáme do asociativního poleseenjako 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ý řádekelseuloží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?