file1
100
내용으로 포함 하고 를 file2
포함합니다 200
. 터미널에서 이 두 숫자에 대해 어떻게 계산을 할 수 있나요? 제가 이 두 숫자를 나누고 싶다고 가정해 봅시다. 내 방법은 echo $(cat file1)/$(cat file2)
이지만 인쇄됩니다 100/200
. 나누어진 값을 출력으로 얻고 싶습니다.
내 원래 의도는 터미널에서 내 컴퓨터의 배터리 비율을 알아내는 것이었습니다. 아래에는 와 이라는 /sys/class/power_suply/BAT1
두 개의 파일이 있습니다 . 현재 배터리 충전 비율을 얻으려면 다음 값을 얻어야 합니다.energy_now
energy_full
100 * energy_now / energy_full
답변1
고양이의 가죽을 벗기는 방법에는 여러 가지가 있습니다. 쉘 버전에 따라 "산술 확장"을 수행할 수 있습니다(참고자료 참조 man bash
).
> echo $(($(cat file1)/$(cat file2)))
0
bash
0은 정수 연산만 수행할 수 있으므로 만족스럽지 않지만 올바른 결과입니다 . 파일을 반전시키면 결과가 훨씬 더 분명해집니다.
> 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)를 팝하고 이를 사용하여 배율을 설정하는 것입니다. 다음 명령은 스택에서 상위 두 숫자를 꺼내서 나누는 것입니다. 그런 다음 결과를 다시 스택에 푸시합니다. 이 명령은 스택의 최상위 숫자(나누기 결과)를 인쇄합니다.200
2
echo
k
/
p