Eu não posso fazer isso com o único sort . Pode não ser possível.
Na minha solução awk manipula a primeira coluna e executa sort quantas vezes forem necessárias. O script recebe entrada de stdin, imprime para stdout).
#!/usr/bin/awk -f
BEGIN { command = "sort -k 2,2g" }
{
if ( NR==1 ) {
val=$1
buf=$0
}
else
if ( $1 < val ) {
print "Unsorted 1st column detected. Processing last valid chunk and aborting." > "/dev/stderr"
exit 1
}
else {
if ( $1 == val )
buf=buf"\n"$0
else
{
print buf | command
close(command)
buf=$0
val=$1
}
}
}
END { print buf | command }
Notas:
-
close(command)é crucial. Sem ele, todos os canais paracommandiriam para um singlesort. - Na minha opinião, os operadores de comparação
awklidam com números muito bem. Para ter certeza de que a solução funciona da mesma forma que osortfuncionaria, você precisa recuperar o status de saída desort -c -k 1,1gparaval"\n"$1e separadamente para$1"\n"vale, em seguida, criar a lógica de script nessa . Isso executaria doissortprocessos por linha de entrada, espero um grande desempenho.