Eu tenho um arquivo com várias colunas e identifiquei linhas em que valores de coluna específicos (cols 3-6) foram duplicados usando um script bash.
Exemplo de entrada:
A B C D E F G
1 2 T TACA A 3 2 Q
3 4 I R 8 2 Q
9 3 A C 9 3 P
8 3 I R 8 2 Q
Eu posso exibir as duas instâncias dos valores repetidos. Os outros valores da coluna (cols 1, 2 e 7+) podem ser diferentes entre as duas linhas, portanto, é necessário que eu veja ambas as instâncias.
Eu quero salvar os registros exclusivos e a primeira instância dos registros duplicados depois de classificar esses dups que foram classificados na col 5 (qualquer ordem servirá) e col 1 (ordem decrescente - primeiro maior valor). / p>
Saída desejada:
A B C D E F G
1 2 T TACA A 3 2 Q
9 3 A C 9 3 P
8 3 I R 8 2 Q
NB: A encomenda na saída final não é importante, uma vez que será aplicada mais tarde. Certificar-se de que as linhas desejadas estão presentes é o que importa.
Meu código até agora é:
tot=$(awk 'n=x[$3,$6]{print n"\n"$0;} {x[$3,$6]=$0;}' oldfilename | wc -l) #counts duplicated records and saves overall count as $tot
if [ $tot == "0" ]
then
awk '{print}' oldfilename >> newfilename #if no dups found, all lines saved in new file
else if
awk '(!(n=x[$3,$6]{print n"\n"$0;} {x[$3,$6]=$0;})' oldfilename >> newfilename #if dups found, unique lines in old file saved in new file
else
awk 'n=x[$3,$6]{print n"\n"$0;} {x[$3,$6]=$0;}' oldfilename > tempfile #save dups in tempfile
sort -k1,1, -k5,5 tempfile #sort tempfile on cols 1 then 5 (want descending order)
fi
O que eu não consigo fazer é pegar a primeira instância de cada duplicata e salvá-la no newfile e ainda tenho erros no código acima.
Por favor ajude.