Доброго времени!Хочу обратиться за консультацией. Вопрос по оптимизации скрипта.
Имеется скрипт, где AWK создаёт отчёт:
(фрагмент)
....................
awk 'count+=$7;
BEGIN {
print "Адр.источник Порт Адр.назначения Порт Протокол Байт Всего \n--------------------------------------------------------------------|"
}
END {
print "\n------------------------------------------------------------------------------- \n income Суммарный входящий трафик с начала месяца(байт):" \
count; }' > $doc_in 2>&1
.............В разультате, получаем отчёт с разобранной статистикой трафика и подсчитанным количеством байт в конце файла.
Но есть желание результаты подсчёта складывать в отдельный файл. Можно, конечно, написать так:
awk '{count+=$7}; END { print count}' $doc_in >> $total или воспользоваться функцией substr(), но ведь это не рационально....Перелапачивать заново весь файл? подсчёт-то уже выполнен.Может быть, есть мнения, как извлеч значение переменной count за рамки AWK?
Попробуй так...
END { print "bla" >> "/path/to/text.file";}'
на старых unix system-v, типа sco, работало.
> Попробуй так...
> END { print "bla" >> "/path/to/text.file";}'
> на старых unix system-v, типа sco, работало.Точно.... помимо существующей, создать ещё процедуру и в ней отправить значение из существующей переменной.
END { ............ count;} END {print count > "./filename";}' .....
Отлично работает и на FreeBSD8.2СПАСИБО!
>> Попробуй так...
>> END { print "bla" >> "/path/to/text.file";}'
>> на старых unix system-v, типа sco, работало.
> Точно.... помимо существующей, создать ещё процедуру и в ней отправить значение из
> существующей переменной.
> END { ............ count;} END {print count > "./filename";}' .....в файл пишет, в переменную не хочет.. Да и как сюда мия переменной подставить, чтоб эта переменная была доступна после отработки awk? ... переменные видны только внутри одинарных ковычек Получается, только через временный файл.
Или я не прав?
`expression` ?
>[оверквотинг удален]
>>> END { print "bla" >> "/path/to/text.file";}'
>>> на старых unix system-v, типа sco, работало.
>> Точно.... помимо существующей, создать ещё процедуру и в ней отправить значение из
>> существующей переменной.
>> END { ............ count;} END {print count > "./filename";}' .....
> в файл пишет, в переменную не хочет.. Да и как сюда
> мия переменной подставить, чтоб эта переменная была доступна после отработки awk?
> ... переменные видны только внутри одинарных ковычек Получается, только через временный
> файл.
> Или я не прав?в принципе - прав. практически все циклы, операции перенаправления ввода, вызов внешних команд выполняются в отдельной оболочке - именно по этому значение переменной и не сохраняется (при выходе из сабшела она просто теряется). однако можно так например:
[root@local temp]# cat n.bsh
#!/bin/bash# file name
n_f='./n.txt'# exec
function n_e()
{
echo 1 >> $n_f
echo 2
echo 3 >> $n_f
}
function n_p()
{
n_e|\
while read n
do
echo $n
done
}# go
n_p[root@local temp]# ./n.bsh
2
[root@local temp]# cat n.txt
1
3фактически - это тоже использоание временных файлов для передачи значения переменной (хоть и не явно), но код более прозрачен для понимания.