awk 'NR==1 { lastcol1=$1; lastline=$0; next; }
{ if ($1==lastcol1) { repeated=1; next; }
if (repeated==0) print lastline; lastcol1=$1; lastline=$0; repeated=0; }
END { if (repeated==0) print lastline; }' input
b 1
d 1
f 1
O comando unix uniq -u
retorna elementos verdadeiramente únicos (em oposição ao comportamento padrão de uniq
). Por exemplo:
echo -e "a\na\nb\nc\nc\nd\ne\ne\ne\nf" | uniq -u
b
d
f
Como esse comando pode ser emulado de maneira restrita à coluna (ou seja, encontrar colunas com elementos exclusivos de uma tabela). Pode-se supor que a entrada já está classificada. Por exemplo, usar a coluna 1 como a coluna exclusiva desejada deve fornecer a seguinte saída:
echo -e "a\t1\na\t2\nb\t1\nc\t1\nc\t2\nd\t1\ne\t1\ne\t2\ne\t3\nf\t1" | some-command -col 1
b 1
d 1
f 1
Colocar a coluna 2 como a coluna exclusiva desejada forneceria a seguinte saída:
echo -e "a\t1\na\t2\nb\t1\nc\t1\nc\t2\nd\t1\ne\t1\ne\t2\ne\t3\nf\t1" | some-command -col 2
e 3
awk 'NR==1 { lastcol1=$1; lastline=$0; next; }
{ if ($1==lastcol1) { repeated=1; next; }
if (repeated==0) print lastline; lastcol1=$1; lastline=$0; repeated=0; }
END { if (repeated==0) print lastline; }' input
b 1
d 1
f 1
de uma maneira usando o awk -
echo -e "a\t1\na\t2\nb\t1\nc\t1\nc\t2\nd\t1\ne\t1\ne\t2\ne\t3\nf\t1" | awk '{a[$1] = $0; count[$1]++} END{for (i in a) {if (count[i]== 1) print a[i]} }'
b 1
d 1
f 1
Para a segunda col, o valor exclusivo é 3 - você mostrou
f 3
como a saída desejada - não deveria ser "e 3"?
echo -e "a\t1\na\t2\nb\t1\nc\t1\nc\t2\nd\t1\ne\t1\ne\t2\ne\t3\nf\t1" | awk '{a[$2] = $0; count[$2]++} END{for (i in a) {if (count[i]== 1) print a[i]} }'
e 3
Tags uniq