GNU Sort 명령이 처음 N 소수점만 고려하도록 강제합니다.

GNU Sort 명령이 처음 N 소수점만 고려하도록 강제합니다.

example다음 데이터가 포함된 텍스트 파일을 생각해 보세요.

0 0.2667328325084663 0.02243994752564071
0 1.86630577374265 0.02243994752564048
0 0.2401209140718633 0.02243994752564071

example다음 명령을 사용하여 먼저 세 번째 열을 정렬한 다음 두 번째 열을 정렬합니다 .

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

이제 새 파일에는 sortedExample다음 내용이 포함됩니다.

0 1.86630577374265 0.02243994752564048
0 0.2401209140718633 0.02243994752564071
0 0.2667328325084663 0.02243994752564071

2열에서 볼 수 있듯이 첫 번째 행의 데이터 값이 두 번째 행의 데이터 값보다 높습니다. 이는 세 번째 열의 첫 번째 행이 0.02243994752564048두 번째 열의 첫 번째 행보다 작기 때문에 예상되는 현상입니다 0.02243994752564071.

문제는 0.02243994752564048과 가 0.02243994752564071소수점 15자리까지 동일하므로 광범위한 응용에서 동일한 값을 갖는다고 가정할 수 있다는 점이다.

여기에서는 15와 같이 소수점 sort첫째 자리만 고려하도록 지시할 수 있는 방법이 있나요 ?N

답변1

@steeldriver는 더 설득력 있는 답변을 제공했습니다( GNU version of sort소수점 처음 6자리를 사용하고 고려한다고 가정).

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

다음으로 이어진다:

0 0.2401209140718633 0.02243994752564071
0 0.2667328325084663 0.02243994752564071
0 1.86630577374265 0.02243994752564048

기반으로이 답변:

먼저, 다음을 사용하여 두 번째 및 세 번째 열을 자릅니다(예: 소수점 6자리까지). (현재는 열당 두 번씩 적용되며 시간이 지남에 따라 답변을 편집할 예정입니다.)

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

그런 다음 위 명령은 다음과 같습니다.

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

원하는 결과를 얻는 것은 다음과 같습니다.

0 0.240120 0.022439
0 0.266732 0.022439
0 1.866305 0.022439

관련 정보