다음을 사용하여 폴더에 포함된 파일의 평균 엔트로피를 계산하려고 합니다.
{ echo '('; find . -type f -exec entropy {} \; | \
grep -Eo '[0-9.]+$' | \
sed -r 's/$/+/g'; echo '0)/';
find . -type f | wc -l; } | \
tr -d '\n' | bc -l
entropy
파일의 Shannon 엔트로피를 계산하는 실행 파일이며 다음 형식의 출력을 제공합니다.
$ entropy foo
foo: 5.13232
앞서 언급한 명령은 다음과 같은 오류가 발생합니다.
(standard_in) 1: syntax error
그러나 생성된 출력에는 문제가 없는 것 같습니다.
$ { echo '('; find . -type f -exec entropy {} \; | \
grep -Eo '[0-9.]+$' | \
sed -r 's/$/+/g'; echo '0)/'; \
find . -type f | wc -l; } | \
tr -d '\n'
(5.13232+2.479+1.4311+0)/3
그리고 이것도 작동합니다:
$ echo '(2.1+2.1)/2' | bc -l
2.1
언급된 명령에 어떤 문제가 있나요?
답변1
그리고 이것도 작동합니다:
echo '(2.1+2.1)/2' | bc -l
아, 그런데 시도해 보셨나요?
echo '(2.1+2.1)/2' | tr -d '\n' | bc -l
(standard_in) 1: syntax error
을 사용하면 echo -n
동일한 결과를 얻을 수 있습니다. 개행 문자가 끝나지 않으며 이것이 문제입니다.
답변2
bc
꽤 특별한 구문이 있습니다. dc
덜 까다롭다:
find . -type f -exec entropy \{\} + |
sed 's/.*://;N;N;s/\n[^:]*:/+/g;s/+//;s|$| 3/p|' |
dc
나생각하다그게 당신이 하려는 일이겠지만, 완전히 확신할 수는 없어요. 한 줄보다 큰 출력 샘플이 도움이 될 것입니다.