GNU/Linux >> Znalost Linux >  >> Linux

Odstranění redundance z výstupních sloupců?

Jaký je *NIX způsob odstranění redundance v případě, kdy mám párová srovnání, jako jsou tato ve dvou sloupcích

    A B
    B A
    A C
    A D
    C A
    D A 
    B C
    C B

A B a B A představují stejné srovnání a rád bych takovou redundanci z datové sady odstranil. Konečný výsledek by měl být

A B
A C
A D
B C

Přijatá odpověď:

doit () 
{ 
    awk '{
           key=$1<=$2? $1 FS $2 : $2 FS $1; 
           if (!seen[key]) print $1,$2
           seen[key]=1
    }'
}
$ doit <test
A B
A C
A D
B C
$

(nebo, začni být stručnější, protože odpověď Chrise Downa je tak sladká)

awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++ {print $1,$2}'

což by se mohlo ještě snížit, pokud se nestaráte o mezery ve vašich datech

awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++'

)

FS je proměnná „oddělovač polí“ awk, která se zde používá k zajištění řádné identifikace hranic mezi klíčovými poli. Můj původní měl je spustit společně, $1$2 , který, jak zdůraznil Stephane Chazelas, by zacházel s A BC a AB C jako duplikáty.


Linux
  1. Odebrání řídicích znaků (včetně kódů konzole / barev) z výstupu skriptu?

  2. Lum – sloučení sloupců ze dvou samostatných souborů?

  3. Linux – sloupec Buffers ve výstupu zdarma?

  1. Rozlišovat Ls na výstupu skripty od binárních souborů?

  2. Proč má Ls -l na výstupu jinou velikost než Ls -s?

  3. výstup 2. sloupce souboru

  1. Jak extrahovat dobu trvání z výstupu ffmpeg?

  2. Přesměrování výstupu z funkčního bloku do souboru v Linuxu

  3. Jak převést výstup z grep do cp?