Существует ряд различных инструментов, которые вы можете использовать в Linux:
sh | bash | ksh | csh
- или какой-либо другой командный интерпретатор awk
perl
python
(зависит от того, установлен ли он) Или любая комбинация вышеперечисленных инструментов.
Возможное решение с использованием bash
и sed
, см. Примечания после об ограничениях / предположениях:
#!/bin/bash
IN_FILE="$1" ## Argument: test.txt
OUT_FILE=
# See done for
while read LINE
do
case $LINE in
begin)
OUT_FILE=
;;
path:*)
OUT_FILE=$(echo "$LINE" | sed 's/^path: \(.*\)/\1/g').txt
## TODO: Do a first-seen OUT_FILE check and truncate file.
echo "begin" >> "$OUT_FILE" # TODO: Write from buffer instead
echo "$LINE" >> "$OUT_FILE"
;;
*)
if [ ! -z "$OUT_FILE" ]
then
echo "$LINE" >> "$OUT_FILE"
else
## TODO: Append to a buffer
fi
;;
esac
done < "$IN_FILE"
ПРИМЕЧАНИЕ: Приведенный выше код дал ожидаемый результат, но я не знаю Не проверял его, чтобы убедиться, что логика полная / без ошибок.
Он также имеет следующие ограничения и проблемы:
.txt
, даже если они уже существуют (проверка уникальности может быть добавлена по запросу). begin
предшествует path: ..
и поэтому может игнорировать эту строку из ввода и записывать ее при обнаружении пути. Можно было бы создать переменную BUFFER
, но я еще не сделал этого. Полночь равна 0, а не 24. Кроме того, каждый столбец работает независимо, поэтому 7-23
означает «всякий раз, когда часовая часть время с 7 до 23 включительно », а не« с 7:00 до 23:00 ». Поэтому используйте 7-23
для «с 7:00 до полуночи» и 0-6
для «от полуночи до 7:00».
*/2 7-23 * * * command
*/10 0-6 * * * command