Eu fiz várias tentativas para isso, mas claramente faltando algo e preciso de ajuda.
Tenho uma grande tabela de milhares de linhas de informações e estou tentando classificá-las em grupos com base nas colunas 3, 4 e 6. Já classifiquei as linhas por essas colunas e agora simplesmente quero fazer o seguinte:
Se coluna 3=linhas anteriores coluna 3 && coluna 4 < linhas anteriores coluna 5 && coluna 6 = linhas anteriores coluna 6; em seguida, imprima a linha, mas altere o início com o número da linha da primeira correspondência que ocorre; senão imprima a linha, mas altere o início com o número da linha atual
Esta foi a minha abordagem horrível cheia de falhas:
awk -F, 'BEGIN { OFS = FS } {if ($4<prev5 && $3==prev3 && $6==prev6) print Marker,$0;else Marker=NR print NR,$0; prev5=$5; prev3=$3; prev6=$6}'
Exemplo de entrada (delimitado por vírgulas para simplificar a visualização):
a,b,2,15,50,ABBA
a,a,2,26,55,ABBA
b,a,2,80,99,ABA
c,a,3,20,40,CAN
a,b,3,51,300.CAN
a,a,4,1000,2000,ART
d,c,4,1700,2050,ART
b,a,4,1800,2051,ART
Saída de exemplo:
1,a,b,2,15,50,ABBA
1,a,a,2,26,55,ABBA
3,b,a,2,80,99,ABA
4,c,a,3,20,40,CAN
5,a,b,3,51,300.CAN
6,a,4,1000,2000,ART
6,c,4,1700,2050,ART
6,b,a,4,1800,2051,ART
Estou apenas tentando agrupar essas linhas pelos critérios fornecidos, para que o identificador do grupo não precise usar o método de número de linha que sugeri, não se houver uma maneira melhor de fazê-lo.
Eu realmente espero que alguém possa ajudar com isso, pois estou sempre interessado em melhorar o código básico que conheço, então também, se possível, forneça explicações também, pois gostaria de aprender com meus erros!
Você pode torná-lo consideravelmente mais legível espalhando o código em várias linhas:
Resultado