[linux] 필드의 숫자 값을 기준으로 파일을 정렬하는 방법은 무엇입니까?

file.txt:

  100 foo
  2 bar
  300 tuu

를 사용하면 sort -k 1,1 file.txt다음과 같이 예상되지만 행 순서는 변경되지 않습니다.

  2 bar
  100 foo
  300 tuu

절대 숫자 값을 기준으로 숫자로 구성된 필드를 정렬하는 방법은 무엇입니까?



답변

정렬을 위해 man 페이지를 들여다보십시오 …

   -n, --numeric-sort
          compare according to string numerical value

여기에 예가 있습니다 …

sort -n filename


답변

예를 들어 롤링 로그의 파일 이름과 같이 텍스트와 숫자가 혼합 된 문자열을 정렬하는 경우 정렬이 sort -n예상대로 작동하지 않습니다.

$ ls |sort -n
output.log.1
output.log.10
output.log.11
output.log.12
output.log.13
output.log.14
output.log.15
output.log.16
output.log.17
output.log.18
output.log.19
output.log.2
output.log.20
output.log.3
output.log.4
output.log.5
output.log.6
output.log.7
output.log.8
output.log.9

이 경우 옵션 -V이 트릭을 수행합니다.

$ ls |sort -V
output.log.1
output.log.2
output.log.3
output.log.4
output.log.5
output.log.6
output.log.7
output.log.8
output.log.9
output.log.10
output.log.11
output.log.12
output.log.13
output.log.14
output.log.15
output.log.16
output.log.17
output.log.18
output.log.19
output.log.20

맨 페이지에서 :

   -V, --version-sort
          natural sort of (version) numbers within text

답변

여기에있는 대부분의 다른 답변은

sort -n

그러나 이것이 음수에 대해 작동하는지 확실하지 않습니다. 다음은 Fedora 9에서 정렬 버전 6.10으로 얻은 결과입니다.

입력 파일:

-0.907928466796875
-0.61614990234375
1.135406494140625
0.48614501953125
-0.4140167236328125

산출:

-0.4140167236328125
0.48614501953125
-0.61614990234375
-0.907928466796875
1.135406494140625

분명히 숫자 값으로 정렬되지 않았습니다.

그렇다면 더 정확한 대답은 sort -n모든 값이 양수인 경우에만 사용하는 것이라고 생각합니다 .

추신 :을 사용하면 sort -g이 예에서 동일한 결과가 반환됩니다 .

편집하다:

로케일 설정이 빼기 기호가 순서에 영향을 미치는 방식에 영향을 미치는 것 같습니다 ( 여기 참조 ). 적절한 결과를 얻기 위해 방금했습니다.

LC_ALL=C sort -n filename.txt


답변

숫자 정렬 옵션을 사용해야합니다.

sort -n -k 1,1 File.txt


답변

사용 sort -n또는 sort --numeric-sort.


답변

다음 명령을 수행해야합니다.

sort -n -k1 filename

그것은 그것을해야합니다 🙂


답변

내림차순으로 정렬하려면 sort -nr을 사용하십시오. 보내다

종류

자세한 내용은 위의 Man 페이지를 참조하십시오.