A partir do exemplo e do seu script, parece que seu arquivo original é classificado pela primeira coluna ( i ), mas você quer que ele seja classificado principalmente pela segunda coluna ( z ) em vez disso e do que por i .
Isso pode ser alcançado com muito mais facilidade com sort
tail -n +2 data.dat | sort -n -k 2 -k 1 >> avg_SD.dat
Também é provavelmente muito mais rápido do que percorrer dois loops e fazer pelo menos um milhão de comparações para cada linha no arquivo de entrada.
Explicação:
-
tail -n +2 data.dat
imprimedata.dat
iniciando com a segunda linha, removendo o cabeçalho. -
|
redireciona a saída do comando à esquerda para a entrada do comando à direita. -
sort -n -k 2 -k 1
classifica a entrada numericamente (-n
), primeiro pelo segundo campo (-k 2
) do que pelo primeiro campo (-k 1
) -
>> avg_SD.dat
imprime a saída emavg_SD.dat
mantendo o conteúdo anterior. Se você quiser sobrescrever o conteúdo anterior, use um único>
em vez de>>
.
Se não houver cabeçalho no arquivo original, você não precisará de tail
e poderá passar data.dat
diretamente para sort
como argumento:
sort -n -k 2 -k 1 data.dat >> avg_SD.dat