Primeiro conjunto de dados de exemplo:
$ awk -vOFS='\t' '{ r=""; delete t; for (i=1;i<=NF;++i) { if (!t[$i]++) { r = r ? r OFS $i : $i } } print r }' file
A B1 C1
B B2 D2
C C12 C13
D D3 D5 D9
G F2
Segundo conjunto de dados de exemplo (mesmo script awk
):
$ awk -vOFS='\t' '{ r=""; delete t; for (i=1;i<=NF;++i) { if (!t[$i]++) { r = r ? r OFS $i : $i } } print r }' file
A CD274 PDCD1LG2 CD276
B NEK2 NEK6 NEK10 NEKL-4
C TNFAIP3 OTUD7B
D DUSP16 DUSP4 DUSP8 VHP-1
E AGO2
O script lê o arquivo de entrada file
linha por linha e, para cada linha, passa por cada campo, construindo a linha de saída, r
. Se o valor em um campo já tiver sido adicionado à linha de saída (determinado por uma tabela de consulta, t
, dos valores de campo usados), o campo será ignorado, caso contrário, será adicionado.
Quando todos os campos de uma linha de entrada foram processados, a linha construída é gerada.
O delimitador do campo de saída está definido para percorrer -vOFS='\t'
na linha de comando.
O script awk
foi desvendado:
{
r = ""
delete t
for (i = 1; i <= NF; ++i) {
if (!t[$i]++) {
r = r ? r OFS $i : $i
}
}
print r
}