#!/bin/bash # Set variables index_number=$1 input_file=$2 # Set BC_LINE_LENGTH=0 to dissable line breaks in BC # https://www.gnu.org/software/bc/manual/html_mono/bc.html#SEC23 export BC_LINE_LENGTH=0 # Pre-calculate π as variable so we can get better accuracy # While commonly used to represent Pi, 22/7 is only accurate to 0.04025% of Pi. # PI=$(echo "scale=100; 22/7" | bc -l) # echo $PI # A more accurate fraction used to approximate Pi is 355/113, which is accurate to 0.00000849%. # PI=$(echo "scale=100; 355/113" | bc -l) # echo $PI # But best way seems to be 4*a(1): this is one of the mathematical formulas used to calculate the number Pi. #This is based on the Arc Tangent a() function. # http://www.tux-planet.fr/calculer-le-chiffre-pi-en-ligne-de-commande-sous-linux/ scale=100 PI=$(echo "scale=$scale; 4*a(1)" | bc -l) # echo $PI # Define e E="2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664" echo "Irrational search script!" echo "" # Check if parameters were supplioed if ! [ $# -eq 2 ]; then echo "Bad amount of arguments supplied!" echo "Usage: $0 INDEX_NUMBER INPUT_FILE" exit 1 elif ! [[ $index_number =~ ^[0-9]+$ ]] ; then echo "INDEX_NUMBER must be acctual number!" exit 2 elif ! [ -f "$input_file" ]; then echo "INPUT_FILE do not exist!" exit 3 fi echo "Index '$index_number' was found '$(grep -o -i $index_number $input_file | wc -l)' times in '$input_file' file" echo "" echo "Looking for longest π($scale) string in '$input_file' file"! echo "π ≈ $PI" echo "" # set intial index lenght pi_lengh=1 while true; do string_of_pi=$(echo ${PI/./} | head -c $pi_lengh) matches=$(grep -o -i $string_of_pi $input_file | wc -l) echo -e "pi_lenght: $pi_lengh,\tstring_of_pi: $string_of_pi,\tmatches: $matches" if [[ $matches -eq 0 ]]; then echo "No more matches!" break else ((pi_lengh++)) fi done echo "Looking for longest e($scale) string in '$input_file' file"! echo "e ≈ $PI" echo "" # set intial index lenght e_lengh=1 while true; do string_of_e=$(echo ${E/./} | head -c $e_lengh) matches=$(grep -o -i $string_of_e $input_file | wc -l) echo -e "e_lenght: $e_lengh,\tstring_of_e: $string_of_e,\tmatches: $matches" if [[ $matches -eq 0 ]]; then echo "No more matches!" break else ((e_lengh++)) fi done