Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: sum and sort with bash


  • Subject: Re: lug-bg: sum and sort with bash
  • From: Peter Pentchev <roam@xxxxxxxxxxx>
  • Date: Fri, 22 Oct 2004 14:36:57 +0300

On Fri, Oct 22, 2004 at 04:19:44AM -0700, Ivailo Ivanov wrote:
[snip]
> Prosto iskam da mi se porediat sorces po napraven
> trafik ot tiah kam, koito i da e destination. Kato
> razbira se kato ima niakolko zapisa na edin i sashti
> source da mu se sumirat baitovete. I naprimer ako
> trafika e nai goliam ot 1.2.3.4 da izleze nai otgore
> sas saotvetnata stionost na sumarnia trafik ot nego
> sled tova vtoria po trafik i.t.n. Po dobre ot tova ne
> moga da go opisha. Blagodaria za scriptovete i
> vnimanieto.

А, това за сортирането го бях пропуснал...  Това, което пратих вчера,
което първо прави един sort и после с while read чете ред по ред и
проверява дали още сме на същия IP адрес, само извежда по IP адреси, не
ги подрежда после.  Можеш да го накараш и да подреди с още едно
извикване на sort след това:

  sort traffic.txt | sh sum.sh | sort -n -r -k2

Първото сортиране няма нужда да подрежда всичко както трябва, само
трябва да събере редовете, които започват по един и същи начин така, че
sum.sh да ги чете един след друг.  След това sum.sh извежда нещата във
формат подобен на:

1.2.3.4 120
12.1.5.2        60
5.24.7.2        40
5.6.7.8 130

...а след това sort -n (числово, така че 12 да бъде след 2) -r (в
обратен ред, така че най-голямото число да бъде най-отгоре) -k2 (по
втората колона, защото първата съдържа IP адреса) ще ги подреди както
трябва:

5.6.7.8 130
1.2.3.4 120
12.1.5.2        60
5.24.7.2        40

Това е при положение, че traffic.txt и sum.sh са както следва:

----- begin traffic.txt
5.24.7.2 1.2.3.4 10 10 20
5.6.7.8 1.2.3.4 10 10 30
1.2.3.4 6.7.8.9 20 20 40
12.1.5.2 6.7.43.2 20 20 20
5.6.7.8 6.7.8.9 20 20 40
1.2.3.4 5.6.7.8 10 10 20
----- end traffic.txt

----- begin sum.sh
#!/bin/sh

cursrc=''
curtraf=0
while read src dst t1 t2 t3; do
	if [ "$src" != "$cursrc" ]; then
		# Polzvame printf, a ne echo -e "$cursrc\t$curtraf", zashtoto
		# kakto maj spomenah i v po-ranen mail do lug-bg, vsyshtnost
		# njama portable nachin da ubedim echo da izvezhda specialni
		# simvoli kato tabulacijata.
		[ ! -z "$cursrc" ] && printf '%s\t%d\n' "$cursrc" "$curtraf"
		cursrc="$src"
		curtraf=0
	fi
	curtraf=`expr "$curtraf" + "$t1" + "$t2" + "$t3"`
	# Ako naistina polzvash bash, a ne sh, i iskash scriptyt ti
	# da vyrvi *samo* s bash, a ne s sh na razlichni mashini,
	# gornijat red mozhe da byde i...
	# curtraf=$(($curtraf + $t1 + $t2 + $t3))
done
# Za poslednija adres...
if [ $curtraf -ne 0 ]; then
	printf '%s\t%d\n' "$cursrc" "$curtraf"
fi
----- end sum.sh

Поздрави,
Петър

-- 
Peter Pentchev	roam@xxxxxxxxxxx    roam@xxxxxxxx    roam@xxxxxxxxxxx
PGP key:	http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint	FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
I am not the subject of this sentence.

Attachment: pgpT_3SenS_tQ.pgp
Description: PGP signature



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.