get paid to paste

RE:#b2e6ff

#! /bin/sh

# example: find ./ -name "*.[ch]pp" -exec cat {} \; | sh ./code-stat.sh

set -e
bc --version >/dev/null
awk --version >/dev/null

file=$(mktemp)
cat > $file

without_spaces() { grep -v "^[ 	]*$"; }
without_brackets() { grep -v "^ *[()] *$" | grep -v "^ *); *$" | grep -v "^ *[}{] *$" | grep -v "^ *}; *$"; }
without_directives() { grep -v "^ *#"; }
structures() { grep "struct \| class" | grep -v ";"; }

all_size=$(cat $file | wc -l)
without_spaces_size=$(cat $file | without_spaces | wc -l)
without_brackets_size=$(cat $file | without_brackets | wc -l)
without_directives_size=$(cat $file | without_directives | wc -l)
structures_size=$(cat $file | structures | wc -l)

pure_code_size=$(cat $file | without_spaces | without_brackets | without_directives | wc -l;)

echo -n "Empty lines: "
echo "($all_size - $without_spaces_size) / $all_size" | bc -l

echo -n "Empty lines with brackets: "
echo "($all_size - $without_brackets_size) / $all_size" | bc -l

echo -n "Preprocessor directives: "
echo "($all_size - $without_directives_size) / $all_size" | bc -l

echo -n "Lines per classes: "
echo "$pure_code_size / $structures_size" | bc -l

pure_code_chars=$(cat $file | without_spaces | without_brackets | without_directives | wc -m)
echo -n "Lines average length: "
echo "$pure_code_chars / $pure_code_size" | bc -l

rm $file

Pasted: Oct 22, 2010, 12:07:00 pm
Views: 10