2014-09-23 4 views
0

루프 내에서 다른 변수 인 bc을 사용하여 계산에 사용할 변수가 있습니다. 그러나 결과는 완전히 잘못되었습니다. 나는 test0, test1 등 32 개의 파일을 가지고있다. 내 스크립트는 다음과 같이 읽 변수 x에 대한for 루프 내에서 bc를 사용하는 방법

for i in {0..31}; do 
    declare x$i=$(wc -l < test$i) 
    declare y$i=$(echo $x$i/10 | bc) 
done 

, 나는 특파원 test$i의 라인, 즉 각 x$i 매장 수 좋은 결과를 얻을 수 있습니다. 그렇다면 각 x$i의 10 %가 얼마인지 알고 간단하게 변수 y$i에 저장하고 싶습니다. 그리고 위에서 말했듯이, 나는 그 스크립트를 사용하여 완전히 잘못된 결과를 얻습니다. 예를 들어 x0 = 155287510의 경우 y0 = 20입니다.

+0

당신이 어떤 결과를 얻을 수 있습니까? 어떤 결과를 기대합니까? 'test $ i' 란 무엇입니까? – terdon

+0

@terdon 방금 내 질문을 편집했습니다 – ziulfer

+0

아마도 'scale' ....을 설정해야합니다. echo "scale = 2; 10/3"| bc' –

답변

6

문제는 이라는 변수의 값이 아니며 변수 xi의 값의 연결입니다.

당신은 Bash 배열을 쉽게 사용하도록 스크립트를 변환 할 수 있지만 Awk에서 이것을하는 것이 더 나을 것 같습니다.

declare -a x 
declare -a y 
for i in {0..31}; do 
    x[$i]=$(wc -l < test$i) 
    y[$i]=$(echo "${x[$i]}"/10 | bc) 
done 

방금 ​​계산의 결과를 원하는 경우,

wc -l test[0-9] test[12][0-9] test3[01] | 
awk '{$1 /= 10 }1' 
+0

껍질이 행복하게 10으로 나눌 때마다 루프 반복마다'bc'를 산다고 생각하지 않습니다.'y [$ i] = $ (($ {x [$ i]}/10)) '. (물론 십진 결과가 필요한 경우'bc '가 더 유용합니다.) –

+0

또는 반올림에 신경 쓰지 않는다면 마지막 숫자 인'$ {x [$ i] %?}'를 버리십시오. – tripleee

+0

그러나 1 자리 숫자에 대해서는 빈 문자열이됩니다. –

관련 문제