Доброго времени суток.
Я составляю словарь орфографии для hunspell. На данном этапе я имею файл аффиксов и файл инфинитивов (с флагами). Однако, из-за «издержек производства» в словаре проскакивают дубли, но с разными флагами. Например.
автоинспектор/1,5,15,20,25
автоинспектор/1,5,15,20,29
адрес/1,5,15,20,25
адрес/1,5,15,20,29
амбарище/1,5,15,25
амбарище/1,5,15,27
...
Из этого нужно получить следующее:
автоинспектор/1,5,15,20,25,29
адрес/1,5,15,20,25,29
амбарище/1,5,15,25,27
...
т.е. убрать слова-дубли, но «сложить» флаги
Написал такой скрипт:
#!/bin/bash
input_file="d.txt"
output_file="out.txt"
previous_word="none"
previous_flags_array=()
for line in `cat $input_file` ; do
IFS="/"
set -- $line
current_word=$1
flags=$2
IFS=","
set -- $flags
current_flags_array=($1 $2 $3 $4 $5)
if [ $previous_word == "none" ] ; then
previous_word=$current_word
previous_flags_array=("${current_flags_array[@]}")
else
if [ $previous_word == $current_word ] ; then
previous_flags_array=("${previous_flags_array[@]}" "${current_flags_array[@]}")
else
sorted_final_flags=($(echo "${previous_flags_array[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))
echo "$previous_word"/"${sorted_final_flags[@]}" >> $output_file
previous_word=$current_word
previous_flags_array=("${current_flags_array[@]}")
fi
fi
done
Есть два вопроса:
1. Скрипт не экспортирует последнее обрабатываемое слово. Как задать, чтобы при достижении EOF также выполнялось:
sorted_final_flags=($(echo "${previous_flags_array[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))
echo "$previous_word"/"${sorted_final_flags[@]}" >> $output_file
2. Данный скрипт написан для 5 позиционных параметров (соответственно 5 флагам). Как задать так, чтобы работало и с большим, и с меньшим количеством параметров (флагов)?