Вам придется показать нам, что вы делаете.Пожалуйста, отредактируйте ваше сообщение, включив в него наименьшее подмножество кода цикла while
, которое иллюстрирует вашу проблему.Также, пожалуйста, покажите точный текст о любых ошибках или сообщениях с предупреждениями.
За ваш комментарий '... Я должен нажать Enter для каждой строки, которую нужно прочитать'.Вы определенно делаете что-то не так.Чтение каждой строки должно быть автоматическим.Вот основные принципы обработки файлов с помощью bash.
Рассматриваете ли вы использовать awk?Я могу опубликовать лучшие решения с помощью этого стандартного инструмента.
inputFiles="${@}"
cat "${inputFiles}"\
| while read line ; do
case ${line} in
2[0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]* )
# matched date
print ${line}
;;
* )
# you'll need to add other reg-expes here to extract data you want
;;
esac
done
Возможно, вам придется удалить dbl-кавычки на ${inputFiles}
.
Цель использования cat ${inputfiles | while read line ...
- разрешить обработкулюбые файлы, которые вы перечисляете в командной строке.
Вы пытались использовать grep
для просмотра ваших файлов журналов?
date1='2011-09-11' ; date2='2011-09-12'; date3='2011-09-13'
grep "${date1}|${date2}|${date3}" *.logFiles | grep -i error
Вы также можете использовать дату1 ... в качестве цели вприведенный выше цикл while.
case ${line} in
${date1}*|${date2}*|${date3}* )
echo $line
;;
esac
Вы можете убрать '*
' выше ИЛИ, если дата НЕ является первым элементом в строке, вам может потребоваться добавить '*
'перед каждым ${dateN}
.
Или, если вы храните ваши файлы в сжатом виде,
gunzip -c ${zippedLogFiles_gz) | grep "${date1}|${date2}|${date3}" | grep -i error
часто является хорошим местом для начала (и только распаковывает ваши файлы на месте(просто отправив несжатый вывод в канал)).
PS, поскольку вы выглядите новым пользователем, если вы получите ответ, который поможет вам, не забудьте пометить его как принятый и / или дать ему+ (или -) в качестве полезного ответа.