¿Cuál es una forma *NIX de eliminar la redundancia en un caso en el que tengo comparaciones por pares como estas en dos columnas?
A B
B A
A C
A D
C A
D A
B C
C B
A B
y B A
representan la misma comparación y me gustaría eliminar dicha redundancia del conjunto de datos. El resultado final debería ser
A B
A C
A D
B C
Respuesta aceptada:
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 poniéndose más breve porque la respuesta de Chris Down es muy dulce)
awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++ {print $1,$2}'
que podría reducirse aún más si no le importan los espacios en sus datos
awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++'
)
El FS
es la variable "separador de campos" de awk, que se utiliza aquí para garantizar que los límites entre los campos clave se identifiquen correctamente. Mi original los tenía juntos, $1$2
, que, como señaló Stephane Chazelas, habría tratado A BC
y AB C
como duplicados.