Jaký je *NIX způsob odstranění redundance v případě, kdy mám párová srovnání, jako jsou tato ve dvou sloupcích
A B
B A
A C
A D
C A
D A
B C
C B
A B
a B A
představují stejné srovnání a rád bych takovou redundanci z datové sady odstranil. Konečný výsledek by měl být
A B
A C
A D
B C
Přijatá odpověď:
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
$
(nebo, začni být stručnější, protože odpověď Chrise Downa je tak sladká)
awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++ {print $1,$2}'
což by se mohlo ještě snížit, pokud se nestaráte o mezery ve vašich datech
awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++'
)
FS
je proměnná „oddělovač polí“ awk, která se zde používá k zajištění řádné identifikace hranic mezi klíčovými poli. Můj původní měl je spustit společně, $1$2
, který, jak zdůraznil Stephane Chazelas, by zacházel s A BC
a AB C
jako duplikáty.
Linux – Jak najít procesy pomocí sériového portu?
Linux – Může mít jeden uživatel více souborů Crontab?