과학적 표기법의 정렬 동작이 이상합니다.

과학적 표기법의 정렬 동작이 이상합니다.

열 26의 일반 숫자 값을 기준으로 정렬하려는 세미콜론으로 구분된 필드가 있는 파일이 있습니다. 나는 이것을 시도했습니다 :

cat file.txt | grep -v setch | sort -t";" -k26 -g

grep 명령은 내가 원하지 않는 일부 줄을 필터링하는 데 사용됩니다.

grep 명령 뒤의 파일은 다음과 같습니다.

5;0;0;0;0;17;0.040000;3.00;17;0.030000;2.00;17;0.040000;7.00;11.5833330154419;11.5833330154419;11.5833330154419;0.522556364536285;312.500000000000;-1384.20000000000;39.0625000000000;6000.00000000000;;;;;;;;;;33.15;;X;;E;
5;0;0;0;0;17;0.040000;3.00;17;0.020000;3.00;17;0.040000;7.00;11.5833330154419;11.5833330154419;11.5833330154419;0.522556364536285;312.500000000000;-1384.20000000000;39.0625000000000;6000.00000000000;;;;-7.18901342e+02;-7.78309691e+01;-7.78225676e+01;-7.78079745e+01;-7.77838466e+01;;39.3333333333333;;X;;E;
5;0;0;0;0;17;0.040000;3.00;17;0.020000;20.00;17;0.040000;7.00;11.5833330154419;11.5833330154419;11.5833330154419;0.522556364536285;312.500000000000;-1384.20000000000;39.0625000000000;6000.00000000000;;;;-7.78309996e+01;-7.78285783e+01;-7.78259409e+01;-7.78212922e+01;-7.78200550e+01;;39.8166666666667;;X;;E;
5;0;0;0;0;17;0.040000;3.00;17;0.030000;3.00;17;0.040000;7.00;11.5833330154419;11.5833330154419;11.5833330154419;0.522556364536285;312.500000000000;-1384.20000000000;39.0625000000000;6000.00000000000;;;;-9.38492178e+02;-5.44898488e+02;-7.78311132e+01;-7.78228037e+01;-7.78082194e+01;;40.6166666666667;;X;;E;
5;0;0;0;0;17;0.040000;3.00;17;0.030000;8.00;17;0.040000;7.00;11.5833330154419;11.5833330154419;11.5833330154419;0.522556364536285;312.500000000000;-1384.20000000000;39.0625000000000;6000.00000000000;;;;-7.78321216e+01;-7.78265847e+01;-7.78213151e+01;-7.78175760e+01;-7.78102439e+01;;40.4833333333333;;X;;E;
5;0;0;0;0;17;0.040000;3.00;17;0.030000;15.00;17;0.040000;7.00;11.5833330154419;11.5833330154419;11.5833330154419;0.522556364536285;312.500000000000;-1384.20000000000;39.0625000000000;6000.00000000000;;;;-7.78326108e+01;-7.78282041e+01;-7.78246496e+01;-7.78216823e+01;-7.78198536e+01;;40.0333333333333;;X;;E;
5;0;0;0;0;17;0.040000;3.00;17;0.020000;15.00;17;0.040000;7.00;11.5833330154419;11.5833330154419;11.5833330154419;0.522556364536285;312.500000000000;-1384.20000000000;39.0625000000000;6000.00000000000;;;;-7.78317280e+01;-7.78275891e+01;-7.78237230e+01;-7.78209144e+01;-7.78197521e+01;;44.3;;X;;E;
5;0;0;0;0;17;0.040000;3.00;17;0.030000;10.00;17;0.040000;7.00;11.5833330154419;11.5833330154419;11.5833330154419;0.522556364536285;312.500000000000;-1384.20000000000;39.0625000000000;6000.00000000000;;;;-7.78322942e+01;-7.78274590e+01;-7.78225495e+01;-7.78192915e+01;-7.78148301e+01;;43.65;;X;;E;
5;0;0;0;0;17;0.040000;3.00;17;0.020000;8.00;17;0.040000;7.00;11.5833330154419;11.5833330154419;11.5833330154419;0.522556364536285;312.500000000000;-1384.20000000000;39.0625000000000;6000.00000000000;;;;-7.78322863e+01;-7.78266434e+01;-7.78211618e+01;-7.78173451e+01;-7.78097348e+01;;45.4833333333333;;X;;E;
5;0;0;0;0;17;0.040000;3.00;17;0.030000;4.00;17;0.040000;7.00;11.5833330154419;11.5833330154419;11.5833330154419;0.522556364536285;312.500000000000;-1384.20000000000;39.0625000000000;6000.00000000000;;;;-7.61265100e+02;-7.78321802e+01;-7.78247066e+01;-7.78104129e+01;-7.78053976e+01;;44.8833333333333;;X;;E;

그러나 출력은 일반적인 숫자 값에 따라 정렬되지 않고 수치적으로(제곱수를 참조하지 않고) 정렬됩니다.

내가 원하는 것을 하기 위해 내가 할 수 있는 일이 있나요?

업데이트: 이는 위 파이프라인의 출력(관련 열만 표시)과 sort -t\; -g -k26,26답변에 제안된 출력입니다.

-9.38492178e+02
-7.78317280e+01
-7.78309996e+01
-7.18901342e+02
-7.78322863e+01
-7.78322942e+01
-7.78326108e+01 
-7.61265100e+02
-7.78321216e+01

답변1

다음 두 파이프라인 간의 출력 차이에 유의하세요.

<yourexample \
sort -t\; -gk26 |
cut -d\; -f26

-7.18901342e+02
-7.78309996e+01
-9.38492178e+02
-7.78321216e+01
-7.78326108e+01
-7.78317280e+01
-7.78322942e+01
-7.78322863e+01
-7.61265100e+02

...그리고...

<yourexample \
sort -t\; -gk26,26 |
cut -d\; -f26

-9.38492178e+02
-7.61265100e+02
-7.18901342e+02
-7.78326108e+01
-7.78322942e+01
-7.78322863e+01
-7.78321216e+01
-7.78317280e+01
-7.78309996e+01

종류오직ey 26 -k정렬과 동일~에서키 26은 줄 끝까지 이어지지만 -key 26,26으로 정렬됩니다 .오직그 열쇠에. 정렬 순서의 다른 필드를 순위결정자로 처리하려면 -key를 더 추가하되 구체적으로 지정하세요.


이 모든 것을 제쳐두고,당신은 댓글을 달았습니다당신은 a와 이야기하고 있습니다5년 된 GNU Coreutils팩. 궁금합니다. 귀하의 릴리스 이후 일부 변경 로그를 건너뛰었는데 이것이 두 릴리스 사이에서 두드러집니다.(v8.6, 2010년 10월):

sort -g이제 더 넓은 범위와 정밀도를 위해 긴 복식을 사용합니다.

sort -h선행 또는 후행 숫자가 있는 숫자는 더 이상 거부되지 않으며 .배수가 있는 숫자는 더 이상 허용되지 않습니다 .. 이제 모든 0이 동일한 것으로 간주됩니다.

업데이트할 수 있습니다.

관련 정보