Используйте ((
для арифметических операций.
if ((${my_array[1]} < DATE)); then
Если вы используете [
, вам нужно изменить <
на -lt
. В отличие от ((
, [
не является специальным синтаксисом оболочки. Это обычная команда с необычным односимвольным именем, что означает, что оболочка интерпретирует <
как перенаправление файла, а не как оператор меньше.
if [ "${my_array[1]}" -lt "${DATE}" ] ; then
Вы можете упростить read
звонки. Вместо того, чтобы читать всю строку, а затем вызывать read
во второй раз для анализа полей, разделенных запятыми, вы можете сделать оба сразу.
Вам также не нужно считывать результаты в массив. read
может назначать несколько переменных одновременно.
Наконец, если вы выведете перенаправление >> my_file.txt
из цикла, вы можете избежать открытия и закрытия файла на каждой итерации, хорошая оптимизация.
while IFS=',' read -r field1 timestamp rest_of_line; do
((timestamp >= DATE)) || continue
echo "$field1 $timestamp"
done <cache_data.txt >my_file.txt
Мне нравится использовать &&
и ||
в качестве сокращения для if
и if !
. Это обычная идиома сценариев для быстрых тестов. Я использовал ||
выше, чтобы продемонстрировать. Вы можете найти это более или менее читабельным. Мнения разные.