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í:
FNRje číslo záznamu aktuálního souboruNRje aktuální celkový počet záznamů ze všech vstupních souborůFNR==NRje pravdivé pouze tehdy, když čteme soubor1$0je 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