Несколько вопросов по bash и sed (удаление \n)

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
mistiq
проходил мимо
Сообщения: 7
Зарегистрирован: 2010-04-01 5:54:09

Несколько вопросов по bash и sed (удаление \n)

Непрочитанное сообщение mistiq » 2010-04-01 6:18:56

Добрый день уважаемые. Несколько вопросов по bash в т.ч. sed
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.хх.хх.хх
Как с помощью скажем sed удалить перенос строки в 1 - 3 - 5 итд строке
чтоб получился результат вида

Код: Выделить всё

 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
2.
Имеем скрипт:

Код: Выделить всё

#!/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
Он из логов радиуса выдирает по вводимому логину время старта сессии пользователя (Accounting Start) время стоп записи (Stop-Script)
и динамический 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
он из логов netflow по вычисленному ранее времени и IP пользователя выдирает такого рода строчки:

Код: Выделить всё

Пнд Фев  1 14:58:35 2010
 87.хх.хх.хх -> 80.хх.хх.хх 42732
Пнд Фев  1 14:58:37 2010
 212.хх.хх.хх -> 80.хх.хх.хх 468
Подскажите наиболее правильный способ совместить эти 2 процедуры.
тоесть мне в значения второго скрипта time_begin time_end ip надо подставить результаты работы первого скрипта.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

x6e6564
проходил мимо

Re: Несколько вопросов по bash и sed (удаление \n)

Непрочитанное сообщение x6e6564 » 2010-04-05 19:00:34

1.

Код: Выделить всё

cat /tmp/test
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.хх.хх.хх

cat /tmp/test | xargs -n 11
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.хх.хх.хх
2. не понял..

mistiq
проходил мимо
Сообщения: 7
Зарегистрирован: 2010-04-01 5:54:09

Re: Несколько вопросов по bash и sed (удаление \n)

Непрочитанное сообщение mistiq » 2010-04-06 13:52:34

x6e6564 писал(а):1.

Код: Выделить всё

cat /tmp/test
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.хх.хх.хх

cat /tmp/test | xargs -n 11
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.хх.хх.хх
2. не понял..
Огромное спасибо, реально не знал.
по поводу 2
мы из первого скрипта получили:
Tue Mar 2 08:11:06 2010 Tue Mar 2 08:23:50 2010 93.хх.хх.хх
Где первое значение время начала сесси, второе время конца сессии и IP который был у пользователя.
Вот теперь мне надо из flow выдрать все соединения для этого IP за этот промежуток времени. Я сейчас делаю это скриптом 2, который привел выше. Интересует как можно это дело совместить.

x6e6564
проходил мимо

Re: Несколько вопросов по bash и sed (удаление \n)

Непрочитанное сообщение x6e6564 » 2010-04-11 5:08:58

если правильно понял, что-то такое..

Код: Выделить всё

cat ~/test
Tue Mar 2 08:11:01 2010 89.хх.хх.хх Tue Mar 2 08:11:06 2010

env LC_ALL=en date -j -f %c `awk '{print  $1$2$3$4$5}' ~/test`
Sat Mar 20 08:11:01 YAKT 2010

env LC_ALL=en date -j -f %c `awk '{print  $7$8$9$10$11}' ~/test`
Sat Mar 20 08:11:06 YAKT 2010

env LC_ALL=en date -j -f %c `awk '{print  $1$2$3$4$5}' ~/test` +%s
1269040261

Код: Выделить всё

time_begin=env LC_ALL=en date -j -f %c `awk '{print  $1$2$3$4$5}' ~/test` +%s
time_end=env LC_ALL=en date -j -f %c `awk '{print  $7$8$9$10$11}' ~/test` +%s