사람이 읽을 수 있는 플래그를 사용하여 du 명령의 출력을 정렬하고 확장자(예: G, M, K...)를 무시하고 숫자로만 결과를 정렬하는 동시에 -h를 제거할 때 예상대로 결과에 플래그를 지정하려고 합니다.
:~/du_exmp$ du -h ./* | sort -n
1.0M ./file2.txt
2.0G ./file3.txt
52K ./file1.txt
:~/du_exmp$ du ./* | sort -n
104 ./file1.txt
2048 ./file2.txt
4204192 ./file3.txt
문제의 근원은 무엇입니까? 어떻게 해결하나요?
답변1
노력하다 sort -h
. 매뉴얼에서-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)
sort --help
명령 옵션을 더 잘 이해하는 데 사용합니다 .
답변2
문제는 당신이 보는 것이 어떻게 sort -n
작동하는지입니다. 행의 초기 선행 값(또는 더 일반적으로 -k
필드를 사용하는 경우)을 보고 정렬합니다. 접미사를 전혀 이해하지 못하므로 KMG
접미사를 만나면 숫자 검색을 중단합니다.
가장 쉬운 방법은 두 번째 예에서 수행한 작업입니다. 플래그 du
없이 사용하면 완전히 자연스럽게 작동합니다.-h
sort
사람이 더 읽기 쉬운 출력을 유지하려면 du -h
다른 중간 파이프라인 단계를 사용하여 디코딩된 숫자를 의 출력에 추가한 du
다음 정렬하고 선택적으로 정렬 키를 제거하여 출력이 다음과 같이 보이도록 해야 합니다. 딱 맞아요 에서 그랬어요 du
.
또 다른 옵션은 plain 을 사용하고 du
두 번째 예와 같이 출력을 정렬한 다음 출력을 다른 단계로 파이프하여 순수 정수를 인코딩하는 것입니다 du -h
.
awk
전통적으로는 마지막 두 가지 아이디어를 사용 하지만 perl
또는 python
역시 작동합니다.