Bash 변수는 값/데이터를 저장하거나 유지합니다.

Bash 변수는 값/데이터를 저장하거나 유지합니다.

이 기사 정보:KB/MB/GB/TB/PB... 접미사가 포함된 합계 수

최신 버전의 Debian으로 업그레이드할 수 없는 이전 Debian 버전을 사용하는 컴퓨터가 몇 대 있는데, 이는 coreutils패키지가 포함되어 있지 않음을 의미합니다 numfmt. 패키지를 얻을 수 있는 다른 방법을 찾으려고 했지만 (machine is Debian 7.6)디스크 크기를 얻기 위해 다른 방법을 사용해야 했습니다. .

현재 다음을 사용하고 있습니다.

lshw -class disk -class storage | grep size: | cut -d "(" -f2 | cut -d ")" -f1 | sed -e 's/[^0-9]/ /g' | paste -sd+ | bc

크기를 쉽게 얻을 수 있지만 GB/TB 또는 MB 단위로 크기를 가져와야 합니다.

내가 사용하는 경우:

lshw -class disk -class storage | grep size: | cut -d "(" -f2 | cut -d ")" -f1

알겠어요

160GB 
160GB

다른 컴퓨터에서는 다음과 같은 예를 볼 수 있습니다.

2TB
2TB
2TB

숫자 뒤의 단어를 변수에 저장한 후 인쇄할 수 있는 방법이 있나요?

또한 하나의 시스템에 서로 다른 크기의 여러 드라이브가 있을 가능성을 제거합니다.

500GB
2TB
3TB

불행하게도 이 방법으로는 내 명령이 작동하지 않습니다.505.

답변1

이 명령이 없어서 lshw다음과 같이 일부 명령을 위조했습니다.

   size: 4200KiB (4200KB)
   size: 420MiB (420MB)
   size: 42GiB (42GB)
   size: 4TiB (4TB)
   size: 2PiB (2PB)

("size:" 줄을 복사하고 일부 치수를 구성한 예를 온라인에서 찾았습니다.)

grep여기에서 awk를 사용하는 이유는 일단 ping, cuttinging 및 ing을 발견하면 sed모든 논리를 awk.

아래 awk 스크립트는 FS필요한 값을 보다 자연스럽게 추출하기 위해 필드 구분 기호( )를 왼쪽 및 오른쪽 대괄호로 설정합니다. 또한 (중복적으로) 총 실행 크기(GB)를 0으로 초기화합니다.

awk는 (간단한) 정규식과 일치하는 입력 행을 볼 때마다 size:중괄호 안에서 실제 작업을 시작합니다. 대괄호 안의 값은 필드 #2에서 끝나므로 awk에게 해당 필드의 숫자와 일치하도록 요청합니다. 우리는 위치 1에서 시작하고 특정 수의 문자를 포함하기를 원합니다. 그런 다음 해당 길이를 기준으로 값이 추출되며 접미사는 문자열의 나머지 부분입니다.

그런 다음 가능한 접미사 목록을 살펴보고(필요에 따라 확장) 현재 크기에 적절한 비율을 곱합니다(Stéphane현재 삭제된 답변에 댓글을 남겨주세요단위는 1000을 기준으로 함).

모든 입력이 소비된 후 awk는 전체 크기를 GB 단위로 인쇄합니다.

스크립트를 파일에 저장하고 다음과 같이 실행하십시오.

lshw -class disk -class storage | awk -f /path/to/script

스크립트:

BEGIN {
  FS="[()]"
  sizegb=0
}

/size: / {
  match($2, "[0-9]+")
  value=substr($2, RSTART, RLENGTH)
  suffix=substr($2, RLENGTH+1)
  if (suffix == "KB")
    sizegb += value / (1000*1000)
  else if (suffix == "MB")
    sizegb += value / 1000
  else if (suffix == "GB")
    sizegb += value
  else if (suffix == "TB")
    sizegb += value * 1000
  else if (suffix == "PB")
    sizegb += value * 1000 * 1000
}

END {
  printf "Total size: %.2f GB\n", sizegb
}

관련 정보