Showing posts with label awk. Show all posts
Showing posts with label awk. Show all posts

Thursday, November 27, 2008

Awk pattern matching over a particular field


1 #!/bin/bash
2
3 echo babbbbil 12223 | awk '{for(i=1;i<=NF;i++){if($i ~ "122"){print $i;i=NF+1}}}'
4

This piece of awk code will go through all the fields and look for pattern "122" and print them. The "i=NF+1" will work like "break;" in C which will make awk to stop printing after the first hit. Happy Awk'ing ;)


Thursday, May 8, 2008

calculate Jitter from a pcap file

#!/bin/bash

if [ -z $1 ]
then
 echo "[+] $0 capture.pcap"
 exit
fi

if [ ! -z $2 ]
then
 limit=$2
else
 limit=0
fi

#tshark -r $1 | grep "1.1.1.1 -> 1.1.1.2" | grep -v "ICMP"| grep -i "\[Data\] Seq\|UDP\|TCP" | awk '{if(NR==1){f=$2;s=$2};print ($2-f),($2-s)*1000;s=$2;}' > jitter.tmp
tshark -r $1 | grep "1.1.1.1 -> 1.1.1.2" | grep -v "ICMP"| grep -i "\[Data\|UDP\|TCP" | awk '{if(NR==1){f=$2;s=$2};print ($2-f),($2-s)*1000;s=$2;}' > jitter.tmp

#cat jitter.tmp | awk '{ k=$2-s ; if(($2-s)<0){k=($2-s)*(-1)} ; t=t+k ; print $1,$2-s,t/NR ; s=$2}' > jitter.txt ## mixed
cat jitter.tmp | awk -v l=$limit '{ k=$2-s ; if(($2-s)<0){k=($2-s)*(-1)} ; t=t+k ; if(k>l){print $1,k,t/NR}; s=$2}' > jitter.txt ## all positive

avg=`tail -n1 jitter.txt | awk '{print $3}'`

echo 'set data style points' > jitter.gp
echo 'set nogrid' >> jitter.gp

echo 'set style line 1 lt 1 lw 2' >> jitter.gp
echo 'set style line 2 lt 2 lw 2' >> jitter.gp
echo 'set style line 3 lt 3 lw 5' >> jitter.gp
echo 'set style line 4 lt 3 lw 1' >> jitter.gp
echo 'set style line 5 lt 3 lw 2' >> jitter.gp
echo 'set style line 6 lt 3 lw 1' >> jitter.gp
echo 'set style line 7 lt 17 lw 2' >> jitter.gp
echo 'set style line 8 lt 17 lw 4' >> jitter.gp

echo '#set logscale y' >> jitter.gp
echo '#set xrange[1:180]' >> jitter.gp
echo '#set yrange[1:2]' >> jitter.gp
echo '#set samples 2000' >> jitter.gp
echo '#set xtics 50' >> jitter.gp
echo '#set ytics 50' >> jitter.gp

echo 'set xlabel  "Time (sec)"' >> jitter.gp
echo 'set ylabel  "Kbit/s"' >> jitter.gp

echo 'plot "jitter.txt" using 1:($2/1) title "jitter ('$avg'ms)" with impulses ls 6' >> jitter.gp
echo '#plot "jitter.txt" using 1:($2/1) title "jitter ('$avg'ms)" with lines ls 6' >> jitter.gp
echo '#replot "jitter.txt" using 1:($3/1) title "cumul jitter ('$avg'ms)" with lines ls 8' >> jitter.gp

echo 'set encoding iso_8859_1' >> jitter.gp
echo 'set term post color "Helvetica" 18' >> jitter.gp
echo 'set output "jitter.eps"' >> jitter.gp
echo 'replot' >> jitter.gp

echo 'set term png' >> jitter.gp
echo 'set output "jitter.png"' >> jitter.gp
echo 'replot' >> jitter.gp

gnuplot jitter.gp 2>&1 1>/dev/null
qiv jitter.png &

My kick-ass script to compute min,max,avg & standard deviation ;)


#!/bin/bash

function usage()
{
echo
echo "[*] usage: $0 filename column"
echo
exit
}

if [ -z $1 ] || [ -z $2 ]
then
usage
fi

line=`cat $1 | wc -l`
max=`cat $1 | awk -v c=$2 '{if($c>=s){s=$c;line=NR}}END{print s,"("line")"}'`
min=`cat $1 | awk -v s=9999999999 -v c=$2 '{if($c<=s){s=$c;line=NR};}END{print s,"("line")"}'`
avg=`cat $1 | awk -v c=$2 '{total=total+$c}END{print total/NR}'`
stdev=`cat $1 | awk -v avg=$avg '{x=$1-avg;total=total+x*x;}END{print sqrt(total/NR)}'`

echo
echo "[*] input : $1"
echo "[*] column : $2"
echo "[*] no of data : $line"

echo
echo "[*] min : $min"
echo "[*] max : $max"
echo "[*] std.dev : $stdev"
echo


Sunday, April 6, 2008

Sed, Grep, Awk Tutorials

Monday, March 10, 2008

Remove leading & trailing spaces with Awk


cat file.txt | awk '{for(i=1;i<=NF;i++){printf("%s ",$i)}; print "\n";}'

Sunday, March 9, 2008

Passing Bash variable in Awk


ext=".jpg" ; awk -v ext=$ext '{print $filename,ext}'

Friday, March 7, 2008

Awk - delete first 3 fields


cat file.txt | awk '{$1=$2=$3="";print $0}'


Monday, March 3, 2008

Print particular line in a file


cat file.txt | awk '{if(NR==8) print $0}'

$0 = holds the whole line in awk
NR = number of records in file.txt
NF = number of fields in file.txt