#!/bin/bash
MyName="Ivanov"
ErrorLog="./error.log"
exec 3> "$ErrorLog"
exec 2>&3
show_help() {
echo "Использование: $0 <номер_основного_файла> <файл1> <файл2> ... [файлN]" >&1
echo "Пример: $0 2 file1.txt file2.txt file3.txt" >&1
echo "Где <номер_основного_файла> — это индекс (начиная с 1) основного файла в списке." >&1
}
if [ $# -eq 0 ]; then
echo "Ошибка: Не указаны параметры." >&2
show_help
exit 1
fi
if [ "$1" == "--help" ]; then
show_help
exit 0
fi
if [ $# -lt 2 ]; then
echo "Ошибка: Недостаточно параметров для выполнения задания." >&2
show_help
exit 1
fi
main_file_index=$1
shift
files=("$@")
total_files=${#files[@]}
if [ "$main_file_index" -lt 1 ] || [ "$main_file_index" -gt "$total_files" ]; then
echo "Ошибка: Index основного файла ($main_file_index) вне диапазона (1..$total_files)." >&2
exit 1
fi
for file in "${files[@]}"; do
if [ ! -r "$file" ]; then
echo "Ошибка: Файл '$file' не существует или недоступен для чтения." >&2
exit 2
fi
done
main_file="${files[$((main_file_index - 1))]}"
main_basename=$(basename "$main_file")
current_time=$(date "+%Y-%m-%d %H:%M:%S")
echo "=== RUNNING SCRIPT at $current_time by $MyName for TASK #11 ===" >&1
line_num=1
while IFS= read -r line || [ -n "$line" ]; do
pattern_clean=$(echo "$line" | sed -E 's/^[[:space:]]*([^[:space:]]+).*/\1/')
if [ -z "$pattern_clean" ]; then
continue
fi
echo -e "[$line_num]\t\t \"$pattern_clean\"" >&1
for (( i=0; i<total_files; i++ )); do
if [ $i -eq $((main_file_index - 1)) ]; then
continue
fi
current_file="${files[$i]}"
while IFS= read -r sub_line || [ -n "$sub_line" ]; do
if [[ "$sub_line" == *'!'* ]]; then
if [[ "$sub_line" == *"$pattern_clean"* ]]; then
replaced_line=$(echo "$sub_line" | sed "s/$pattern_clean/$main_basename/g")
char_count=$(echo -n "$replaced_line" | wc -m)
echo -e "${char_count}\t$(basename "$current_file")\t$replaced_line" >&1
fi
fi
done < "$current_file"
done
((line_num++))
done < "$main_file"
exec 3>&-
exit 0