Força Comando de Ordenação GNU para considerar apenas os primeiros N pontos decimais

0

Por favor, considere um arquivo de texto chamado example contendo os seguintes dados:

0 0.2667328325084663 0.02243994752564071
0 1.86630577374265 0.02243994752564048
0 0.2401209140718633 0.02243994752564071

Classificamos example a terceira coluna primeiro e depois a segunda coluna pelo seguinte comando:

sort -g -k 3,3 -k 2,2 <example > sortedExample

O novo arquivo sortedExample agora contém o seguinte:

0 1.86630577374265 0.02243994752564048
0 0.2401209140718633 0.02243994752564071
0 0.2667328325084663 0.02243994752564071

Como pode ser visto na segunda coluna, o valor dos dados da primeira linha é maior que o da segunda linha. Isso é esperado, pois a primeira linha da terceira coluna, 0.02243994752564048 , é menor que a da segunda 0.02243994752564071 .

O problema é que 0.02243994752564048 e 0.02243994752564071 são os mesmos até o 15º número decimal, portanto podemos supor que eles tenham o mesmo valor em uma ampla gama de aplicativos.

Existe alguma maneira de dizer a sort para considerar apenas os primeiros% decimais N , por exemplo? 15 aqui?

    
por KutalmisB 04.04.2018 / 13:41

1 resposta

0

@steeldriver deu a resposta mais eloqüente (digamos que usamos GNU version of sort e gostaríamos de considerar os primeiros seis pontos decimais):

sort -g -k 3.1,3.6 -k 2.1,2.6 <example > sortedExample

resultando em:

0 0.2401209140718633 0.02243994752564071
0 0.2667328325084663 0.02243994752564071
0 1.86630577374265 0.02243994752564048

Com base em esta resposta :

Primeiramente truncamos (digamos até as 6ª casas decimais) as 2ª e 3ª colunas com o seguinte (No momento em que foi aplicado duas vezes para cada coluna, vou editar minha resposta ao longo do tempo):

sed 's|\([0-9]\.[0-9]\{6\}\)[0-9]\{1,\}||' example > interim

Em seguida, o comando acima mencionado:

sort -g -k 3,3 -k 2,2 <interim2 > sortedExample

O resultado desejado é obtido como:

0 0.240120 0.022439
0 0.266732 0.022439
0 1.866305 0.022439
    
por 04.04.2018 / 14:30

Tags