-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlang_tutor.sh
107 lines (103 loc) · 4.95 KB
/
lang_tutor.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/bin/bash
### the main program
## version: 2024-01-28-19-10
set -u
SOURCE_FILE="f:\ob\my_notes\Serbian\phrases.md"
# RESULT_FILE="products_fixed.csv"
#touch "temp_phrases.csv"
#rm "temp_phrases.csv"
#touch "temp_phrases.csv"
SAVEIFS=${IFS}
IFS='
'
# Randomize https://stackoverflow.com/questions/2153882/how-can-i-shuffle-the-lines-of-a-text-file-on-the-unix-command-line-or-in-a-shel
INPUT_DATA=$(cat $SOURCE_FILE | shuf)
# for CURRENT_LINE in ${INPUT_DATA}; do
# #echo $CURRENT_LINE
# COUNT=$(echo "$CURRENT_LINE" | awk -F \| '{ print $3}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
# LOSSES=$(echo "$CURRENT_LINE" | awk -F \| '{ print $4 }' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
# if [ "$LOSSES" = "" ]; then
# LOSSES=0
# fi
# if [ "$COUNT" = "" ]; then
# COUNT=0
# fi
# DIFF=$(expr ${COUNT} - ${LOSSES})
# CURRENT_SCORED_LINE=$(echo "$CURRENT_LINE" | awk -v DIFF=$DIFF -F \| 'OFS="|"{$5=DIFF ; print ;}')
# #echo -----
# SCORED_DATA="$SCORED_DATA
# $CURRENT_SCORED_LINE"
# done
SCORED_DATA=${INPUT_DATA}
# https://unix.stackexchange.com/questions/275794/iterating-over-multiple-CURRENT_LINE-string-stored-in-variable
#echo "$variable" | while IFS= read -r CURRENT_LINE ; do echo $CURRENT_LINE; done
#echo "$SCORED_DATA" | while IFS= read -r CURRENT_LINE; do echo $CURRENT_LINE; done | awk -F\| '{print $0}' | sort -t\| -k5
for CURRENT_LINE in ${SCORED_DATA}; do
#echo "$CURRENT_LINE"
QUESTION=$(echo "$CURRENT_LINE" | sed 's/.$//' | awk -F \| '{ print $1}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
# exchanged sed 's/.$//' for sed -e 's/'"`printf '\015'`"'$//' . If necessary, do it in the whole document //todo
#PROPER_ANSWER=$(echo "$CURRENT_LINE" | sed 's/.$//' | awk -F \| '{ print $2}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | sed -r 's/\ +/\ /g')
PROPER_ANSWER=$(echo "$CURRENT_LINE" | sed -e 's/'"$(printf '\015')"'$//' | awk -F \| '{ print $2}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | sed -r 's/\ +/\ /g')
NORMALIZED_PROPER_ANSWER=$(echo "$PROPER_ANSWER" | sed -e 's/\(.*\)/\L\1/' | tr -d '[:punct:]')
COUNT_SYMBOLS_PROPER_ANSWER=$(echo "$NORMALIZED_PROPER_ANSWER" | wc -c)
COUNT=$(echo "$CURRENT_LINE" | sed 's/.$//' | awk -F \| '{ print $3}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
LOSSES=$(echo "$CURRENT_LINE" | sed 's/.$//' | awk -F \| '{ print $4}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
if [ "$LOSSES" = "" ]; then
LOSSES=0
fi
if [ "$COUNT" = "" ]; then
COUNT=0
fi
COUNT=$(expr ${COUNT} + 1)
WRONG_ANSWER="1"
while [ "${WRONG_ANSWER}" = "1" ]; do
clear
echo QUESTION: $QUESTION
read -u 2 -p "Your answer: " USER_ANSWER # Take user input from stderr instead https://unix.stackexchange.com/questions/460266/use-read-as-a-prompt-inside-a-while-loop-driven-by-read
USER_ANSWER=$(echo $USER_ANSWER | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | sed -r 's/\ +/\ /g')
NORMALIZED_USER_ANSWER=$(echo $USER_ANSWER | sed -e 's/\(.*\)/\L\1/' | tr -d '[:punct:]')
COUNT_SYMBOLS_USER_ANSWER=$(echo "$NORMALIZED_USER_ANSWER" | wc -c)
KOEFF="2"
FIXED_COUNT_SYMBOLS_USER_ANSWER=$(expr ${COUNT_SYMBOLS_USER_ANSWER} \* ${KOEFF} - 4)
DIFF_COUNT=$(expr ${COUNT_SYMBOLS_PROPER_ANSWER} - ${FIXED_COUNT_SYMBOLS_USER_ANSWER})
clear
if [ "$NORMALIZED_USER_ANSWER" = "$NORMALIZED_PROPER_ANSWER" ]; then
echo Q: $QUESTION
echo A: $PROPER_ANSWER
echo _____________________________________________________________________________
echo Correct!
WRONG_ANSWER=0
elif [ $DIFF_COUNT -gt 0 ]; then
echo Do not be so lazy! Write something.
else
echo PROPER ANSWER: $PROPER_ANSWER
echo " YOUR ANSWER :" $USER_ANSWER
echo _____________________________________________________________________________
#comm -23 <(echo $NORMALIZED_PROPER_ANSWER | tr ' ' '\n' | sort) <(echo $NORMALIZED_USER_ANSWER | tr ' ' '\n' | sort)
DIFF_TEXT=`comm -23 <(echo $NORMALIZED_PROPER_ANSWER | tr ' ' '\n' | sort) <(echo $NORMALIZED_USER_ANSWER | tr ' ' '\n' | sort)`
if [ -n "$DIFF_TEXT" ]; then # $string1 не была объявлена или инициализирована.
echo " Please pay attention to the spelling of the following words:"
for WRONG_WORD in ${DIFF_TEXT}; do
echo "* $WRONG_WORD"
done
else
echo " Please note the following:"
echo "* Incorrect word order in a sentence"
fi
LOSSES=$(expr ${LOSSES} + 1)
#echo $QUESTION"|"$PROPER_ANSWER"|"$COUNT"|"$LOSSES >>temp_phrases.csv
fi
#read -u2 -rsn1 -p "Press any key to continue . . ."
echo _____________________________________________________________________________
read -u2 -n1 -s -r -p $'Press any key to continue or ESC to exit...\n' key
#echo $key
if [ "$key" = $'\e' ]; then
echo Good by!
exit
fi
done
done
IFS=${SAVEIFS}
#DATE=$(date "+%Y%m%d_%H%M")
#mv $SOURCE_FILE $DATE.csv
#mv temp_phrases.csv $SOURCE_FILE