유닉스에서 사람이 읽을 수 있는 -h 접미사와 파일 시스템 크기를 비교하는 방법

유닉스에서 사람이 읽을 수 있는 -h 접미사와 파일 시스템 크기를 비교하는 방법

이것을 추억으로 입력하겠습니다. 10M 또는 50G 또는 50K

파일 시스템에서 사용 가능한 크기를 확인하고 싶습니다. 이를 위해 나는 df -h명령을 사용하고 있습니다

df -Ph . | awk 'NR==2 {print $4}' 

140M을 얻었는데 입력이 10k, 10M, 10G처럼 다를 수 있습니다.

전임자:

내 입력은 20G이고 파일 시스템에서 사용 가능한 메모리는 140M입니다.

이제 어떻게 이 두 크기(50G > 140M?)를 비교하고 출력을 에코할 수 있습니까?

답변1

정렬과 함께 -h를 사용할 수도 있습니다.

$cat <<EOF | sort -h
50G 
140M 
10M
50K
EOF

결과:

50K
10M
140M 
50G 

설명하다:

-h, --human-numeric-sort, 사람이 읽을 수 있는 숫자 비교(예: 2K 1G)

또는 bash에서:

compare()
{
cat <<EOF | sort -h
$1
$2
EOF
}

set $(compare 50G 140M)
echo "$1 <= $2"

결과:

140M <= 50G

비교를 작성하는 또 다른 방법:

compare()
{
echo -e "$1 \0 $2" | sort -zh
}

답변2

사용 가능한 값과 입력 값을 Kb로 변환하고 비교하십시오.

#!/bin/bash

echo -n "Enter the value ( value should end with G/M/K): "
read DISK_VALUE

AVAILABLE_SPACE=$(df -h . | awk 'NR==2{print $4}')
AVAILABLE_SPACE_IN_KB=$(echo "${AVAILABLE_SPACE}" | awk '/M$/{print ($0+0)*1024}/G$/{print ($0+0)*1024*1024}/K$/{print $0+0}')
COMPARE_VALUE_IN_KB=$(echo "${DISK_VALUE}" | awk '/M$/{print ($0+0)*1024}/G$/{print ($0+0)*1024*1024}/K$/{print $0+0}')

echo "AVAILABLE_SPACE_IN_KB : ${AVAILABLE_SPACE_IN_KB}"
echo "COMPARE_VALUE_IN_KB : ${COMPARE_VALUE_IN_KB}"

if [ "${AVAILABLE_SPACE_IN_KB}" -lt "${COMPARE_VALUE_IN_KB}" ]
then
        echo "Available space (${AVAILABLE_SPACE}) is lesser than Given Value (${DISK_VALUE})"
else
        echo "Available space (${AVAILABLE_SPACE}) is greater than Given Value (${DISK_VALUE})"
fi

$ bash a.sh
Enter the value : 1000K
AVAILABLE_SPACE_IN_KB : 100
COMPARE_VALUE_IN_KB : 1000
Available space (100K) is lesser than Given Value (1000K)

$ bash a.sh
Enter the value : 101M
AVAILABLE_SPACE_IN_KB : 102400
COMPARE_VALUE_IN_KB : 103424
Available space (100M) is lesser than Given Value (101M)

관련 정보