두 파일의 내용을 계산합니다.

두 파일의 내용을 계산합니다.

file1100내용으로 포함 하고 를 file2포함합니다 200. 터미널에서 이 두 숫자에 대해 어떻게 계산을 할 수 있나요? 제가 이 두 숫자를 나누고 싶다고 가정해 봅시다. 내 방법은 echo $(cat file1)/$(cat file2)이지만 인쇄됩니다 100/200. 나누어진 값을 출력으로 얻고 싶습니다.

내 원래 의도는 터미널에서 내 컴퓨터의 배터리 비율을 알아내는 것이었습니다. 아래에는 와 이라는 /sys/class/power_suply/BAT1두 개의 파일이 있습니다 . 현재 배터리 충전 비율을 얻으려면 다음 값을 얻어야 합니다.energy_nowenergy_full100 * energy_now / energy_full

답변1

고양이의 가죽을 벗기는 방법에는 여러 가지가 있습니다. 쉘 버전에 따라 "산술 확장"을 수행할 수 있습니다(참고자료 참조 man bash).

> echo $(($(cat file1)/$(cat file2)))
0

bash0은 정수 연산만 수행할 수 있으므로 만족스럽지 않지만 올바른 결과입니다 . 파일을 반전시키면 결과가 훨씬 더 분명해집니다.

> echo $(($(cat file2)/$(cat file1)))
2

시스템에 bc( man bc-Arbitrary Precision Calculator Language)이 설치되어 있는 경우 다음을 시도해 보십시오.

> echo "scale=2; $(cat file1)/$(cat file2)" | bc
.50

게다가 원하는 결과를 쉽게 생성할 수 있는 텍스트 처리 및/또는 스크립팅 언어( awk, perl, 등) 가 많이 있습니다 .python

답변2

이를 수행하는 특별한 도구가 있습니다.calc

하다

$ sudo apt install calc
$ man calc

모든 명령줄 또는 스크립트 내 계산 요구 사항이 해결됩니다.

bash를 쉘로 사용하는 경우 다음을 사용할 수 있습니다.원시 산술. 그러나 이것은 단지 정수일 뿐입니다. 소수점이 필요한 경우 - calc.

답변3

임의의 정밀도 계산기를 사용하려면 dc먼저 두 숫자를 계산기 스택에 넣고 소수 자릿수를 2로 설정하고(즉, 계산 결과는 소수 자릿수 2개로 설정) 두 숫자의 나눗셈을 계산한 후 결과를 인쇄합니다.

{ cat file1 file2; echo '2k/p'; } | dc

dc사용하는 계산기이다역 폴란드 표기법. 위 명령에서 합계는 두 파일의 출력에서 dc​​제공됩니다 100. 첫 번째 명령은 스택에서 맨 위 숫자(2)를 팝하고 이를 사용하여 배율을 설정하는 것입니다. 다음 명령은 스택에서 상위 두 숫자를 꺼내서 나누는 것입니다. 그런 다음 결과를 다시 스택에 푸시합니다. 이 명령은 스택의 최상위 숫자(나누기 결과)를 인쇄합니다.2002echok/p

관련 정보