Ни одно из отдельных правил в файле samplerule не превышает 148 символов в длину - намного меньше, чем ограничение в 1024 символа. Вы не говорите, что следует делать с правилами, если они превышают этот предел.
Это очень простой Bash-скрипт, который разбит ваш пример на литерале "\ n" на массив и называется "rules". Он пропускает строки длиной более 1024 символов и выводит сообщение об ошибке:
#!/bin/bash
while read -r line
do
(( count++ ))
if (( ${#line} > 1024 ))
then
echo "Line length limit of 1024 characters exceeded: Length: ${#line} Line no.: $count"
echo "$line"
continue
fi
rules+=($line)
done < <(echo -e "$(<samplerule)")
Эта вариация будет урезать длину строки без учета последствий:
#!/bin/bash
while read -r line
do
rules+=(${line:0:1024})
done < <(echo -e "$(<samplerule)")
Если литерала "\ n" на самом деле нет в файле, и вам нужно использовать массивы Bash, а не кодировать его целиком в AWK, измените строку в любой из версий выше, которая гласит:
done < <(echo -e "$(<samplerule)")
сказать это:
done < <(awk 'BEGIN {RS="OR"} {print $0,"OR"}' samplerule)
if [[ "${rules[${#rules[@]}-1]}" == "OR" ]]
then
unset "rules[${#rules[@]}-1]"
fi
, который разделит строки на "ИЛИ".
Редактировать: Добавлена команда для удаления лишнего "ИЛИ" в конце.