Qu'est-ce qu'un moyen * NIX de supprimer la redondance dans un cas où j'ai des comparaisons par paires comme celles-ci dans deux colonnes
A B
B A
A C
A D
C A
D A
B C
C B
A B
et B A
représentent la même comparaison et je voudrais supprimer cette redondance de l'ensemble de données. Le résultat final devrait être
A B
A C
A D
B C
Réponse acceptée :
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
$
(ou, devenir plus terrifiant avec ça parce que la réponse de Chris Down est si douce)
awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++ {print $1,$2}'
qui pourrait être encore réduit si vous ne vous souciez pas des espaces dans vos données
awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++'
)
Le FS
est la variable "séparateur de champs" d'awk, utilisée ici pour garantir que les limites entre les champs clés seront correctement identifiées. Mon original les avait exécutés ensemble, $1$2
, qui comme l'a souligné Stéphane Chazelas aurait traité A BC
et AB C
comme doublons.