Použití některých méně známých nástrojů:
sort file1 > file1.sorted
sort file2 > file2.sorted
comm -1 -3 file1.sorted file2.sorted
Toto vypíše duplikáty, takže pokud je 1 3
v file1
, ale 2 v file2
, bude to stále vydávat 1 3
. Pokud to není to, co chcete, použijte výstup z sort
až uniq
před zápisem do souboru:
sort file1 | uniq > file1.sorted
sort file2 | uniq > file2.sorted
comm -1 -3 file1.sorted file2.sorted
V balíku GNU coreutils je spousta nástrojů, které umožňují nejrůznější manipulace s textem.
$ awk 'FNR==NR {a[$0]++; next} !($0 in a)' file1 file2
6
7
Vysvětlení toho, jak kód funguje:
- Pokud pracujeme na souboru 1, sledujte každý řádek textu, který vidíme.
- Pokud pracujeme na souboru 2 a nevidíme text řádku, vytiskněte jej.
Vysvětlení podrobností:
FNR
je číslo záznamu aktuálního souboruNR
je aktuální celkový počet záznamů ze všech vstupních souborůFNR==NR
je pravdivé pouze tehdy, když čteme soubor1$0
je aktuální řádek textua[$0]
je hash s klíčem nastaveným na aktuální řádek textua[$0]++
stopy, které jsme viděli aktuální řádek textu!($0 in a)
je true pouze tehdy, když jsme neviděli řádkový text- Vytiskněte řádek textu, pokud výše uvedený vzor vrátí hodnotu true, toto je výchozí chování awk, když není provedena žádná explicitní akce