쉘 스크립트의 단위 승수 변환

Jaksky

사람이 읽을 수있는 크기를 바이트로 변환해야합니다. 불행히도 numfmt 함수에 액세스 할 수 없습니다. 다른 대안이 있습니까? sh 스크립트 내부에서 호출하려면 셸 / bash 함수가 필요합니다.

1K는 1000으로, 1M은 1000 000으로 변환해야합니다.

조셉 R.

Perl을 사용할 수있는 경우 :

echo your_string | perl -ne '
    BEGIN{ %suffixes=( K => 3, M => 6, G => 9, T => 12, P => 15, E => 18 ); 
           $suffix_regex = join "|", keys %suffixes;
    }
    s/([0-9][0-9]*(?:\.[0-9]+)?)($suffix_regex)/$1e$suffixes{$2}/g;
    printf "%d\n", $_;
'

이것은 텍스트 필터로 사용되기 때문에 perl스크립트 로 정의하고 입력을 파이프 하는 것이 더 적절 합니다. 다음을 추가하여 쉘 함수 내에 임베드 할 수 있습니다 .bashrc(Bash를 사용한다고 가정).

myconvert() {
    cat <<'EOF' >/dev/null
#!--perl-- -n
BEGIN{ %suffixes=( K => 3, M => 6, G => 9, T => 12, P => 15, E => 18 ); 
       $suffix_regex = join "|", keys %suffixes;
}
s/([0-9][0-9]*(?:\.[0-9]+)?)($suffix_regex)/$1e$suffixes{$2}/g;
printf "%d\n", $_;
__END__
EOF
   exec perl -x "/path/to/your/.bashrc"
}

sed사용하는 솔루션 bc:

myconvert(){
  sed '
      s/\([0-9][0-9]*\(\.[0-9]\+\)\?\)K/\1*1000/g;
      s/\([0-9][0-9]*\(\.[0-9]\+\)\?\)M/\1*1000000/g;
      s/\([0-9][0-9]*\(\.[0-9]\+\)\?\)G/\1*1000000000/g;
      s/\([0-9][0-9]*\(\.[0-9]\+\)\?\)T/\1*1000000000000/g;
      s/\([0-9][0-9]*\(\.[0-9]\+\)\?\)P/\1*1000000000000000/g;
      s/\([0-9][0-9]*\(\.[0-9]\+\)\?\)E/\1*1000000000000000000/g
  ' </dev/stdin | bc | sed 's/\..*$//' # Final sed to remove decimal point
}

사용법 (두 솔루션 모두 동일) :

$ echo '5.23K' | myconvert
5230
$ echo '6.27G' | myconvert
6270000000

이 솔루션은 입력이 형식의 문자열로만 구성되어 있다고 가정합니다 5.23K(분수 부분은 선택 사항). 그렇지 않으면 bc어떻게해야할지 알 수 없습니다.

노트

Perl 원 라이너 < /dev/stdinsed솔루션 마찬가지로 쉘 기능에있는 그대로 삽입 될 수 있습니다 . 답변의 첫 번째 버전을 작성할 때 이것은 내 마음을 건너지 않았습니다. perl -x하지만 다른 사람에게 도움이 될 수있는 경우를 대비 하여 속임수를 남겨 두겠습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Linux 쉘 스크립트의 위치 매개 변수 양

분류에서Dev

WLST Python 스크립트가 쉘 스크립트의 변수를 승인 할 수 없습니다.

분류에서Dev

쉘 스크립트의 변수 보간

분류에서Dev

쉘 스크립트의 부울 변수

분류에서Dev

쉘 스크립트의 백분율 기호 및 환경 변수

분류에서Dev

쉘 스크립트에서 시간 범위의 텍스트 표현 변환

분류에서Dev

쉘 스크립트의 변수를 문자열에서 숫자로 변환

분류에서Dev

쉘 스크립트에서 환경 변수 업데이트

분류에서Dev

쉘 스크립트 변수 및 루프

분류에서Dev

쉘 스크립트의 변수에 저장된 각 단어 주위에 따옴표를 어떻게 추가 할 수 있습니까?

분류에서Dev

zsh 스크립트를 zsh 쉘 함수로 변환

분류에서Dev

쉘 스크립트의 두 단어 인수

분류에서Dev

쉘 스크립트의 두 단어 인수-Unix

분류에서Dev

쉘 스크립트 내부의 쉘 스크립트가 int 변수를 얻지 못합니다.

분류에서Dev

쉘 스크립트 변수로 자신의 IP adresss 사용

분류에서Dev

Bash 출력을 쉘 스크립트의 변수로 캡처

분류에서Dev

쉘 스크립트의 변수 할당 규칙

분류에서Dev

파워 쉘 스크립트의 매개 변수로 json 전달

분류에서Dev

쉘 스크립트 내의 명령에 변수 삽입

분류에서Dev

쉘 스크립트에서 변수 할당의 공백

분류에서Dev

쉘 스크립트의 출력을 변수에 저장

분류에서Dev

쉘 스크립트의 while 루프 내에서 변수 할당

분류에서Dev

쉘 스크립트 "while"조건의 "-h"매개 변수

분류에서Dev

변수 값 추가 및 쉘 스크립트에서 16 진수로 변환

분류에서Dev

변수 값 추가 및 쉘 스크립트에서 16 진수로 변환

분류에서Dev

단일 awk 변수를 검증하는 쉘 스크립팅

분류에서Dev

두 개의 독립적 인 쉘 스크립트간에 변수 공유

분류에서Dev

내 쉘 bash 스크립트 기본 $ PWD를 (스크립트의) 현재 위치로 변경

분류에서Dev

스크립트의 변수를 사용하여 다른 디렉토리로 변경하는 쉘 스크립트

Related 관련 기사

  1. 1

    Linux 쉘 스크립트의 위치 매개 변수 양

  2. 2

    WLST Python 스크립트가 쉘 스크립트의 변수를 승인 할 수 없습니다.

  3. 3

    쉘 스크립트의 변수 보간

  4. 4

    쉘 스크립트의 부울 변수

  5. 5

    쉘 스크립트의 백분율 기호 및 환경 변수

  6. 6

    쉘 스크립트에서 시간 범위의 텍스트 표현 변환

  7. 7

    쉘 스크립트의 변수를 문자열에서 숫자로 변환

  8. 8

    쉘 스크립트에서 환경 변수 업데이트

  9. 9

    쉘 스크립트 변수 및 루프

  10. 10

    쉘 스크립트의 변수에 저장된 각 단어 주위에 따옴표를 어떻게 추가 할 수 있습니까?

  11. 11

    zsh 스크립트를 zsh 쉘 함수로 변환

  12. 12

    쉘 스크립트의 두 단어 인수

  13. 13

    쉘 스크립트의 두 단어 인수-Unix

  14. 14

    쉘 스크립트 내부의 쉘 스크립트가 int 변수를 얻지 못합니다.

  15. 15

    쉘 스크립트 변수로 자신의 IP adresss 사용

  16. 16

    Bash 출력을 쉘 스크립트의 변수로 캡처

  17. 17

    쉘 스크립트의 변수 할당 규칙

  18. 18

    파워 쉘 스크립트의 매개 변수로 json 전달

  19. 19

    쉘 스크립트 내의 명령에 변수 삽입

  20. 20

    쉘 스크립트에서 변수 할당의 공백

  21. 21

    쉘 스크립트의 출력을 변수에 저장

  22. 22

    쉘 스크립트의 while 루프 내에서 변수 할당

  23. 23

    쉘 스크립트 "while"조건의 "-h"매개 변수

  24. 24

    변수 값 추가 및 쉘 스크립트에서 16 진수로 변환

  25. 25

    변수 값 추가 및 쉘 스크립트에서 16 진수로 변환

  26. 26

    단일 awk 변수를 검증하는 쉘 스크립팅

  27. 27

    두 개의 독립적 인 쉘 스크립트간에 변수 공유

  28. 28

    내 쉘 bash 스크립트 기본 $ PWD를 (스크립트의) 현재 위치로 변경

  29. 29

    스크립트의 변수를 사용하여 다른 디렉토리로 변경하는 쉘 스크립트

뜨겁다태그

보관