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.