Несколько вопросов по bash и sed (удаление \n)
Добавлено: 2010-04-01 6:18:56
Добрый день уважаемые. Несколько вопросов по bash в т.ч. sed
1. имеем файл вида:
Как с помощью скажем sed удалить перенос строки в 1 - 3 - 5 итд строке
чтоб получился результат вида
мне дает несколько странный вывод:
2.
Имеем скрипт:
Он из логов радиуса выдирает по вводимому логину время старта сессии пользователя (Accounting Start) время стоп записи (Stop-Script)
и динамический IP пользователя который передается в Stop записи.
И есть скрипт:
он из логов netflow по вычисленному ранее времени и IP пользователя выдирает такого рода строчки:
Подскажите наиболее правильный способ совместить эти 2 процедуры.
тоесть мне в значения второго скрипта time_begin time_end ip надо подставить результаты работы первого скрипта.
1. имеем файл вида:
Код: Выделить всё
Tue Mar 2 08:11:06 2010
Tue Mar 2 08:23:50 2010 93.хх.хх.хх
Tue Mar 2 08:23:55 2010
Tue Mar 2 12:13:29 2010 89.хх.хх.ххчтоб получился результат вида
Код: Выделить всё
Tue Mar 2 08:11:06 2010 Tue Mar 2 08:23:50 2010 93.хх.хх.хх
Tue Mar 2 08:23:55 2010 Tue Mar 2 12:13:29 2010 89.хх.хх.ххКод: Выделить всё
sed '$!N;s/\n//'Код: Выделить всё
Tue Mar 2 08:11:01 2010 89.хх.хх.хх Tue Mar 2 08:11:06 2010
Tue Mar 2 08:23:50 2010 93.хх.хх.хх Tue Mar 2 08:23:55 2010Имеем скрипт:
Код: Выделить всё
#!/bin/bash
CWD=`pwd`
FILE="*logfile*"
$CWD 2>&1>/dev/null
clear
echo; echo "Enter username:"
read user
case $user in
$user )
cat $FILE | grep $user | grep -E '(Accounting \(Start\))|(Stop-Script)' \
| awk '{print (" "$1 " " $2 " " $3 " " $4 " " $5 " " $21)}' | sed '$!N;s/\n//' #work not properly
esac
exit 0
и динамический IP пользователя который передается в Stop записи.
И есть скрипт:
Код: Выделить всё
#!/bin/bash
time_begin=`date -d "Mon Feb 1 09:51:01 2010" +%s`
time_end=`date -d "Thu Feb 4 12:00:10 2010" +%s`
ip="80.xx.xx.xx"
CWD=`pwd`
echo $time_begin
let "time_b=$time_begin/1000-1"
let "time_e=$time_end/1000+1"
for ((a=time_b; a <= time_e ; a++))
do
for i in $CWD/*-*.xxx.flows.bz2
do taskset 1 bzcat $i | taskset 2 grep $ip | taskset 3 awk -v tbgn=$time_begin -v tend=$time_end '{
if ($1 >= tbgn && $1 < tend)
{print $0}
}' | awk '{system("date -d @"$1""); print var " " $2 " " $3 " " $4 " " $9 }'
done >> result.log
doneКод: Выделить всё
Пнд Фев 1 14:58:35 2010
87.хх.хх.хх -> 80.хх.хх.хх 42732
Пнд Фев 1 14:58:37 2010
212.хх.хх.хх -> 80.хх.хх.хх 468
тоесть мне в значения второго скрипта time_begin time_end ip надо подставить результаты работы первого скрипта.