#! /bin/bash #script for generating statistic of given PDF-file #needs pdflatex and pdfgrep #example usage: ./generateStatistic.sh -i ./f14ergebnisse_vor_einsicht_gemb_i_et.pdf -d 01.04.2014 -t "GeMB I" -n gemb #default values name="statistic" seperator="\." while getopts ":n:i:s:t:d:" opt; do case $opt in n) name=$OPTARG ;; i) inputFile=$OPTARG ;; s) seperator=$OPTARG ;; t) title=$OPTARG ;; d) date=$OPTARG ;; \?) echo "Invalid option: -$OPTARG" exit 1 ;; :) echo "Option -$OPTARG requires an argument." exit 1 ;; esac done print_usage() { echo "usage: generateStatistic -i inputFileName -t title -d date [-n outputFileName] [-s seperatorChar]" } if [ -z ${inputFile+x} ]; then echo "error: inputFileName must be set with -i option"; print_usage; exit 1; fi if [ -z ${title+x} ]; then echo "warning: title should be set. Using Dummy-Klausur instead" title="Dummy-Klausur" print_usage; fi if [ -z ${date+x} ]; then echo "warning: date should be set. Using 27.04.1993 instead" date="27.04.1993" print_usage; fi numberOfOneDotZero=$(pdfgrep -c "1"$seperator"0[^0-9a-zA-Z]" $inputFile) numberOfOneDotThree=$(pdfgrep -c "1"$seperator"3[^0-9a-zA-Z]" $inputFile) numberOfOneDotSeven=$(pdfgrep -c "1"$seperator"7[^0-9a-zA-Z]" $inputFile) numberOfTwoDotZero=$(pdfgrep -c "2"$seperator"0[^0-9a-zA-Z]" $inputFile) numberOfTwoDotThree=$(pdfgrep -c "2"$seperator"3[^0-9a-zA-Z]" $inputFile) numberOfTwoDotSeven=$(pdfgrep -c "2"$seperator"7[^0-9a-zA-Z]" $inputFile) numberOfThreeDotZero=$(pdfgrep -c "3"$seperator"0[^0-9a-zA-Z]" $inputFile) numberOfThreeDotThree=$(pdfgrep -c "3"$seperator"3[^0-9a-zA-Z]" $inputFile) numberOfThreeDotSeven=$(pdfgrep -c "3"$seperator"7[^0-9a-zA-Z]" $inputFile) numberOfFourDotZero=$(pdfgrep -c "4"$seperator"0[^0-9a-zA-Z]" $inputFile) numberOfFiveDotZero=$(pdfgrep -c "5"$seperator"0[^0-9a-zA-Z]" $inputFile) numberOfAll=$[$numberOfOneDotZero+$numberOfOneDotThree+$numberOfOneDotSeven+$numberOfTwoDotZero+$numberOfTwoDotThree+$numberOfTwoDotSeven +$numberOfThreeDotZero+$numberOfThreeDotThree+$numberOfThreeDotSeven+$numberOfFourDotZero+$numberOfFiveDotZero] if [ $numberOfAll == 0 ] then echo "error: could not count anyone. check seperator" print_usage; exit 1 fi amountOfOneDotZero=$[($numberOfOneDotZero*100)/$numberOfAll] amountOfOneDotZeroFraction=$[(($numberOfOneDotZero*10000)/$numberOfAll)%100] amountOfOneDotThree=$[($numberOfOneDotThree*100)/$numberOfAll] amountOfOneDotThreeFraction=$[(($numberOfOneDotThree*10000)/$numberOfAll)%100] amountOfOneDotSeven=$[($numberOfOneDotSeven*100)/$numberOfAll] amountOfOneDotSevenFraction=$[(($numberOfOneDotSeven*10000)/$numberOfAll)%100] amountOfTwoDotZero=$[($numberOfTwoDotZero*100)/$numberOfAll] amountOfTwoDotZeroFraction=$[(($numberOfTwoDotZero*10000)/$numberOfAll)%100] amountOfTwoDotThree=$[($numberOfTwoDotThree*100)/$numberOfAll] amountOfTwoDotThreeFraction=$[(($numberOfTwoDotThree*10000)/$numberOfAll)%100] amountOfTwoDotSeven=$[($numberOfTwoDotSeven*100)/$numberOfAll] amountOfTwoDotSevenFraction=$[(($numberOfTwoDotSeven*10000)/$numberOfAll)%100] amountOfThreeDotZero=$[($numberOfThreeDotZero*100)/$numberOfAll] amountOfThreeDotZeroFraction=$[(($numberOfThreeDotZero*10000)/$numberOfAll)%100] amountOfThreeDotThree=$[($numberOfThreeDotThree*100)/$numberOfAll] amountOfThreeDotThreeFraction=$[(($numberOfThreeDotThree*10000)/$numberOfAll)%100] amountOfThreeDotSeven=$[($numberOfThreeDotSeven*100)/$numberOfAll] amountOfThreeDotSevenFraction=$[(($numberOfThreeDotSeven*10000)/$numberOfAll)%100] amountOfFourDotZero=$[($numberOfFourDotZero*100)/$numberOfAll] amountOfFourDotZeroFraction=$[(($numberOfFourDotZero*10000)/$numberOfAll)%100] amountOfFiveDotZero=$[($numberOfFiveDotZero*100)/$numberOfAll] amountOfFiveDotZeroFraction=$[(($numberOfFiveDotZero*10000)/$numberOfAll)%100] averageOfAll=$[(($numberOfOneDotZero * 10)+($numberOfOneDotThree * 13)+($numberOfOneDotSeven * 17) +($numberOfTwoDotZero * 20)+($numberOfTwoDotThree * 23)+($numberOfTwoDotSeven * 27) +($numberOfThreeDotZero * 30)+($numberOfThreeDotThree * 33)+($numberOfThreeDotSeven * 37) +($numberOfFourDotZero * 40)+($numberOfFiveDotZero * 50))/($numberOfAll * 10)] averageOfAllFraction=$[((($numberOfOneDotZero * 1000)+($numberOfOneDotThree * 1300)+($numberOfOneDotSeven * 1700) +($numberOfTwoDotZero * 2000)+($numberOfTwoDotThree * 2300)+($numberOfTwoDotSeven * 2700) +($numberOfThreeDotZero * 3000)+($numberOfThreeDotThree * 3300)+($numberOfThreeDotSeven * 3700) +($numberOfFourDotZero * 4000)+($numberOfFiveDotZero * 5000))/($numberOfAll * 10))%100] echo "\documentclass[parskip]{scrartcl} %Dokumentenklasse \usepackage{lmodern} %Vektorschrift \usepackage[T1]{fontenc} %Zeichensatzkodierung von 7bit auf 8bit \usepackage[utf8]{inputenc} %Zeichensatzkodierung Unicode bzw. UTF8 \usepackage[ngerman]{babel} %Silbentrennung nach neuer Rechtschreibung \usepackage{marvosym} %Benutzung des Symbol-Pakets marvosym \usepackage{array} \usepackage{graphicx} \usepackage{pdfpages} \usepackage{pgfplots} \DeclareUnicodeCharacter{20AC}{\EUR} %Zuordnung des Euro-Symbols \tolerance=2000 \setlength{\emergencystretch}{20pt} %verhindert das herausragen von Wörtern übers Zeilenende \begin{document} \title{"$title"-Klausur vom "$date" - Statistik vor Einsicht} \thispagestyle{empty} \centering {\huge \textbf{"$title"}} \\\\ \vspace{0.5cm} \centering {\LARGE {Klausur vom "$date" vor Einsicht}} \begin{center} \begin{tabular}[b]{|c|c|c|}\firsthline \textbf{Note} & \textbf{Anzahl} & \textbf{Anteil} \\\\\\hline 1.0 & "$numberOfOneDotZero" & "$amountOfOneDotZero"."$amountOfOneDotZeroFraction"\% \\\\\\hline 1.3 & "$numberOfOneDotThree" & "$amountOfOneDotThree"."$amountOfOneDotThreeFraction"\% \\\\\\hline 1.7 & "$numberOfOneDotSeven" & "$amountOfOneDotSeven"."$amountOfOneDotSevenFraction"\% \\\\\\hline 2.0 & "$numberOfTwoDotZero" & "$amountOfTwoDotZero"."$amountOfTwoDotZeroFraction"\% \\\\\\hline 2.3 & "$numberOfTwoDotThree" & "$amountOfTwoDotThree"."$amountOfTwoDotThreeFraction"\% \\\\\\hline 2.7 & "$numberOfTwoDotSeven" & "$amountOfTwoDotSeven"."$amountOfTwoDotSevenFraction"\% \\\\\\hline 3.0 & "$numberOfThreeDotZero" & "$amountOfThreeDotZero"."$amountOfThreeDotZeroFraction"\% \\\\\\hline 3.3 & "$numberOfThreeDotThree" & "$amountOfThreeDotThree"."$amountOfThreeDotThreeFraction"\% \\\\\\hline 3.7 & "$numberOfThreeDotSeven" & "$amountOfThreeDotSeven"."$amountOfThreeDotSevenFraction"\%\\\\\\hline 4.0 & "$numberOfFourDotZero" & "$amountOfFourDotZero"."$amountOfFourDotZeroFraction"\% \\\\\\hline 5.0 & "$numberOfFiveDotZero" & "$amountOfFiveDotZero"."$amountOfFiveDotZeroFraction"\% \\\\\\lasthline \end{tabular} \end{center} \begin{center} \begin{tabular}{|ccc|}\firsthline \textbf{Teilnehmer} && "$numberOfAll" \\\\\\hline \textbf{Nicht bestanden} & & "$amountOfFiveDotZero"."$amountOfFiveDotZeroFraction"\% \\\\\\hline \textbf{Durchschnitt} && "$averageOfAll"."$averageOfAllFraction" \\\\\\hline \end{tabular} \end{center} \begin{tikzpicture} \begin{axis}[ ybar, symbolic x coords={1.0,1.3,1.7,2.0,2.3,2.7,3.0,3.3,3.7,4.0,5.0}, xtick={data}, nodes near coords, axis x line*=bottom, % Sternchen führt dazu, dass kein Pfeil an Achse. axis y line*=left, % Sternchen führt dazu, dass kein Pfeil an Achse. width = 16cm, height = 9cm, bar width = 1cm ] \addplot coordinates {(1.0,"$numberOfOneDotZero") (1.3,"$numberOfOneDotThree") (1.7,"$numberOfOneDotSeven") (2.0,"$numberOfTwoDotZero") (2.3,"$numberOfTwoDotThree") (2.7,"$numberOfTwoDotSeven") (3.0,"$numberOfThreeDotZero") (3.3,"$numberOfThreeDotThree") (3.7,"$numberOfThreeDotSeven") (4.0,"$numberOfFourDotZero") (5.0,"$numberOfFiveDotZero")}; \end{axis} \end{tikzpicture} \end{document}" > $name.tex; pdflatex -jobname $name $name.tex > /dev/null; rm $name.tex $name.log $name.aux;