Saya mencoba menghitung rata-rata entropi file yang terkandung dalam folder menggunakan:
{ 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
menjadi executable yang menghitung entropi Shannon file, memberikan output dari bentuk:
$ entropy foo
foo: 5.13232
Perintah yang disebutkan di atas salah dengan:
(standard_in) 1: syntax error
Namun, output yang dihasilkan tampaknya tidak memiliki masalah:
$ { 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
Dan ini juga bekerja:
$ echo '(2.1+2.1)/2' | bc -l
2.1
Apa yang salah dengan perintah yang disebutkan?
bc
perintah: bandingkan printf '(5.13232+2.479+1.4311+0)/3' | bc -l
dengan echo '(5.13232+2.479+1.4311+0)/3' | bc -l
. ( tr -d '\n'
perintah Anda menghapus baris tambahan yang bc
dibutuhkan).
{ cat; echo; }
antara tr
dan bc
: tr -d '\n' | { cat; echo; } | bc -l
atau mengganti tr -d '\n'
bagian dengan:{ tr -d '\n'; echo; }
paste -sd'\0' -
alih-alih tr -d '\n'
untuk mempertahankan karakter baris baru terakhir. (lihat juga paste -sd+ -
untuk bergabung dengan garis +
).
awk
? Akan jauh lebih mudah.