GNU/Linux >> Znalost Linux >  >> Linux

extrahování jedinečných hodnot mezi 2 sadami/soubory

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 sortuniq 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 souboru
  • NR 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 textu
  • a[$0] je hash s klíčem nastaveným na aktuální řádek textu
  • a[$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

Linux
  1. Kartézský součin dvou souborů (jako sady řádků) v GNU/Linux

  2. hledání jedinečných hodnot v datovém souboru

  3. rozdíl mezi souborem zařízení a ovladačem zařízení

  1. Tisknout dva soubory ve dvou sloupcích?

  2. Ssh – Kopírování chráněných souborů mezi servery v jednom řádku?

  3. Extrahování souborů SFX v Linuxu

  1. Společné řádky mezi dvěma soubory?

  2. extrahování textu ze souborů MS Word v pythonu

  3. Najděte soubory vytvořené v určitém časovém období