Was ist eine *NIX-Methode zum Entfernen von Redundanz in einem Fall, in dem ich paarweise Vergleiche wie diese in zwei Spalten habe
A B
B A
A C
A D
C A
D A
B C
C B
A B
und B A
denselben Vergleich darstellen und ich möchte solche Redundanzen aus dem Datensatz entfernen. Das Endergebnis sollte sein
A B
A C
A D
B C
Akzeptierte Antwort:
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
$
(oder es wird knapper, weil Chris Downs Antwort so süß ist)
awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++ {print $1,$2}'
was weiter reduziert werden könnte, wenn Sie sich nicht um die Leerzeichen in Ihren Daten kümmern
awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++'
)
Der FS
ist die „Feldtrenner“-Variable von awk, die hier verwendet wird, um sicherzustellen, dass die Grenzen zwischen Schlüsselfeldern richtig identifiziert werden. Bei meinem Original liefen sie zusammen, $1$2
, die, wie Stephane Chazelas betonte, A BC
behandelt hätte und AB C
als Duplikate.