Программа требует, чтобы мы прочитали в каталоге, полном текстовых файлов, проанализировали данные из этих файлов в их соответствующие атрибуты.
Затем, как только данные установлены, загрузите общий шаблон, который имеет эти атрибуты втекст. Я использую команду sed для замены определенных атрибутов, только если число студентов превышает 50. Если это так, он запускает команду sed и записывает в файл и в каталог.
Но яя получаю эту ошибку, когда я передаю
test3.sh ./data assign4.template 12/16/2021 ./output
Ошибка
cat: assign4.template: No such file or directory
test3.sh: line 62: output/MAT3103.crs: No such file or directory
The current file is MAT4353.crs
Теперь я думаю, что из-за ошибки файла или каталога она ищет в этой папке ипоиск файла с таким именем
Но не совсем уверен, как его решить.
Что касается ошибки cat: template, я не получаю этого, так как передаю шаблон в терминале
Что касается других передаваемых параметров, Date, который также подставляется в команду sed. Все выходные файлы должны быть записаны в каталог, определенный последним аргументом. Этот каталог может или не может уже существовать. Каждый файл должен быть назван по коду и номеру отдела курса, а также с расширением. Warn
Вот общий код
#!/bin/bash
# checking if user has passed atleast four arguments are passed
if [ $# -ne 4 ]
then
echo "Atleast 4 argument should be passed"
exit 1
fi
# if output directory exits check
if [ -d output ]
then
# if output directory exists will get deleted
echo "output directory already exists. So removing its contents"
rm -f output/*
else
# output directory does not exist, so gets created here
echo "output directory does not exist. So creating a new directory"
mkdir output
fi
max_students=50
template=$2
dt=$3
cd $1
for i in *; do
echo The current file is ${i}
dept_code=$(awk 'NR==2
{print $1 ; exit}' $i)
echo $dept_code
dept_name=$(awk 'NR==2
{print $2 ; exit}' $i)
echo $dept_name
course_name=$(awk 'FNR==2' $i)
echo $course_name
course_sched=$(awk 'FNR==3' $i | awk '{print $1}')
course_sched=$(awk 'FNR==3' $i | awk '{print $1}')
echo $course_sched
course_start=$(awk 'FNR==3' $i | awk '{print $2}')
echo $course_start
course_end=$(awk 'FNR==3' $i | awk '{print $3}')
echo $course_end
credit_hours=$(awk 'FNR==4' $i)
echo $credit_hours
num_students=$(awk 'FNR==5' $i)
echo $num_students
# checking if number of students currently enrolled > max students
if (( $(echo "$num_students > $max_students" |bc -l) ))
then
# output filename creation
out_file=${i}
# using example Template and sed command to replace the variables
cat $template | sed -e "s/\[\\[\dept_code\]\]/$dept_code/" | sed -e "s/\[\\[\dept_name\]\]/$dept_name/" | sed -e "s|\[\[course_name\]\]|$course_name|" | sed -e "s|\[\[course_start\]\]|$$
fi
done