GNU/Linux >> Linux Esercitazione >  >> Linux

Rimuovere la ridondanza dalle colonne di output?

Qual è un modo *NIX per rimuovere la ridondanza in un caso in cui ho confronti a coppie come questi in due colonne

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

A B e B A rappresentano lo stesso confronto e vorrei rimuovere tale ridondanza dal set di dati. Il risultato finale dovrebbe essere

A B
A C
A D
B C

Risposta accettata:

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
$

(o, essere più conciso perché la risposta di Chris Down è così dolce)

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

che potrebbe essere ulteriormente ridotto se non ti interessano gli spazi nei tuoi dati

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

)

Il FS è la variabile "separatore di campo" di awk, utilizzata qui per garantire che i confini tra i campi chiave vengano identificati correttamente. Il mio originale li faceva funzionare insieme, $1$2 , che come ha sottolineato Stephane Chazelas avrebbe trattato A BC e AB C come duplicati.


Linux
  1. Lum:unire colonne da due file separati?

  2. Linux:la colonna dei buffer nell'output di Free?

  3. Intercetta input e output da un eseguibile specifico?

  4. Reindirizzamento dell'output da un blocco funzione a un file in Linux

  5. Riga di comando:estrai la sottostringa dall'output

Colora l'output dei sensori?

Come vedere l'output di uno script PHP?

Esecuzione di un comando linux da python

MYSQL differisce nell'output dallo script

Esecuzione di uno script Python da PHP

Come reindirizzare l'output da grep a cp?