Страница 2 из 2
Re: Автоматический постинг в Twitter
Добавлено: 2012-12-11 15:39:19
Raschen
Код: Выделить всё
#!/bin/sh
#
# 20121211_twit.sh
# 2012-12-11 13:20:11
#
# файл сообщений
FILE_MESS="twit.txt"
# файл хранения номера последней строки
FILE_NUM="twit_post.num"
# Интервал отправки сообщений в секундах
INTERVAL=10
# если файл существует, вычитываем номер последней строки
if [ -r "${FILE_NUM}" ]; then
LAST_NUM="`cat "${FILE_NUM}"`"
KOL_STR="`wc -l "${FILE_MESS}" | sed 's/^[ ]*\([0-9][0-9]*\).*$/\1/'`"
[ 0${LAST_NUM} -ge 0${KOL_STR} ] && LAST_NUM=0
else
LAST_NUM=0
fi
CURR_NUM=0
while read mess
do
CURR_NUM=$((${CURR_NUM}+1))
[ ${CURR_NUM} -le ${LAST_NUM} ] && continue
echo "${mess}"
#ttytter -status="${mess}"
# записать в файл номер последней строки
echo ${CURR_NUM} > ${FILE_NUM}
sleep ${INTERVAL}
done < "${FILE_MESS}"
вот что получается
Код: Выделить всё
bzda# cat twit.txt
11111 petya
22222 vasya
33333 anton
bzda# ./test.sh
11111 petya
22222 vasya
33333 anton
bzda# cat twit_post.num
3
bzda# ./test.sh
11111 petya -----\
22222 vasya ----- > почему тут получается не пустой вывод ведь записано что последняя строка 3 ?
33333 anton ----/
bzda#
Re: Автоматический постинг в Twitter
Добавлено: 2012-12-11 15:54:24
kpp
Потому что вывод циклический - если достигнут конец файла, начинать опять с начала файла.
Если циклически не нужно, закомментировать строку
Код: Выделить всё
[ 0${LAST_NUM} -ge 0${KOL_STR} ] && LAST_NUM=0
Re: Автоматический постинг в Twitter
Добавлено: 2012-12-11 18:44:28
Raschen
спасиб то что надо осталось только одна проблема новые записи добавляются в начало файла
Re: Автоматический постинг в Twitter
Добавлено: 2012-12-11 20:04:34
kpp
Огласите сразу все входные условия.
В час по чайной ложке, прямо "пытка апельсинами длилась 3 часа" (с)
Re: Автоматический постинг в Twitter
Добавлено: 2012-12-11 20:19:40
Raschen
все работает наоборот
в файле тхт данные добавляются в начало файла вот так:
Код: Выделить всё
11111 Ivan -> (12:16 pm)
22222 petr -> (12:14 pm)
33333 Sergey -> (12:01 pm)
то есть надо следить за первой строкой
если какое нибудь регулярное выражение чтоб отсортировать тхт файл наоборот чтоб было так
Код: Выделить всё
33333 Sergey -> (12:01 pm)
22222 petr -> (12:14 pm)
11111 Ivan -> (12:16 pm)
или проще скрипт исправить ?
Re: Автоматический постинг в Twitter
Добавлено: 2012-12-11 20:57:45
kpp
Вижу два варианта решения.
Подготовительные изменения:
Код: Выделить всё
KOL_NEW="`exp ${KOL_STR} - ${LAST_NUM}`"
[ 0${KOL_STR} -eq 0 ] && exit 0
[ 0${KOL_NEW} -eq 0 ] && exit 0
CURR_NUM=1
LINE_OBOR=
Вариант 1. Если ЕСТЬ возможность отсортировать по каким-либо признакам (например по времени (12:16 pm)), то делать так:
Код: Выделить всё
sort +4 -5 +3 -4 "${FILE_MESS}" | head -n ${KOL_NEW} | (\
while read mess
do
echo "${mess}"
# ttytter -status="${mess}"
# записать в файл номер последней строки
echo ${CURR_NUM} > ${FILE_NUM}
CURR_NUM=$((${CURR_NUM}+1))
sleep ${INTERVAL}
done
)
Вариант 2. Если НЕТ возможности отсортировать:
Код: Выделить всё
head -n ${KOL_NEW} "${FILE_MESS}" | (\
while read mess
do
if [ ${CURR_NUM} -eq 1 ]; then
CURR_NUM=$((${CURR_NUM}+1))
LINE_OBOR="${mess}"
else
LINE_OBOR="`echo -e "${mess}\n${LINE_OBOR}"`"
fi
done
echo "${LINE_OBOR}" ) |\
( CURR_NUM=$((${LAST_NUM}+1))
while read mess
do
echo "${mess}"
# ttytter -status="${mess}"
# записать в файл номер последней строки
echo ${CURR_NUM} > ${FILE_NUM}
CURR_NUM=$((${CURR_NUM}+1))
sleep ${INTERVAL}
done
)
Re: Автоматический постинг в Twitter
Добавлено: 2012-12-11 21:10:54
kpp
Поправка 1-го варианта:
Код: Выделить всё
CURR_NUM=$((${LAST_NUM}+1))
head -n ${KOL_NEW} "${FILE_MESS}" | sort +4 -5 +3 -4 | (\
while read mess
do
echo "${mess}"
# ttytter -status="${mess}"
# записать в файл номер последней строки
echo ${CURR_NUM} > ${FILE_NUM}
CURR_NUM=$((${CURR_NUM}+1))
sleep ${INTERVAL}
done
)
Re: Автоматический постинг в Twitter
Добавлено: 2012-12-11 21:24:14
kpp
Поправка ко 2-му варианту (красота\оптимизация):
Код: Выделить всё
head -n ${KOL_NEW} "${FILE_MESS}" |\
( while read mess
do
if [ -z "${LINE_OBOR}" ]; then
LINE_OBOR="${mess}"
else
LINE_OBOR="`echo -e "${mess}\n${LINE_OBOR}"`"
fi
done
echo "${LINE_OBOR}" ) |\
( CURR_NUM=$((${LAST_NUM}+1))
while read mess
do
echo "${mess}"
# ttytter -status="${mess}"
# записать в файл номер последней строки
echo ${CURR_NUM} > ${FILE_NUM}
CURR_NUM=$((${CURR_NUM}+1))
sleep ${INTERVAL}
done )
Re: Автоматический постинг в Twitter
Добавлено: 2012-12-11 21:45:25
Raschen
Все разрешилось при помощи sort спасибо большое за помощь