I have been working on some code for a while, that will parse a log file, look for a specified time discrepancy between entries, and then print that line +/- n other lines out to a file...
Code:
#!/bin/bash
file=$1 # The input log file
maxTime=$2 # The time discrepancy to look for
n=$3 # The number of log entries to memorize
outFile=$4 # The output file
declare -a array
if [[ ! -n $1 || ! -n $2 || ! -n $3 || ! -n $4 ]]; then
echo "ERROR"
exit 128
fi
# This value is to print lines AFTER match
till=0
# This is a temp value to compare timestamps
previous=0
# egrep gets rid of all non-timestamped lines
egrep -n '^[0-9]' $file | \
while IFS="[.|:]" read number datetime min sec milli rest; do
milliseconds=$(date -d "$datetime:$min:$sec" +%s)$milli
line="$number:$datetime:$min:$sec.$milli|$rest"
# Memorize the last n lines
array=("${array[@]}" $line)
if [[ ${#array[@]} -gt $n ]] ; then
# get rid of overflow
array=(${array[@]:1})
fi
# Calculate time difference on current and last line
if [[ $previous -ne 0 ]] ; then
(( difference = milliseconds - previous ))
else
difference=0
fi
if [[ $till -gt $number ]] ; then
echo $line
else
if [[ $difference -gt $maxTime ]] ; then
(( till = number + n ))
# Print the history
for item in ${array[@]}
do
echo $item
done
# Print the current match
echo $line
fi
fi
previous=$milliseconds
done
Can somebody tell me what is wrong here?
I think that the problem is that "$line" sometimes contains spaces in its text... which are then interpreted as separate array items... which fills up my buffer with parts of a single line instead of the memorized lines... but honestly I don't know what I can do about that
Hi all!
i need your help.
I'm getting started with this...
in need to insert in an array string values. But the thing is that this strings have blank spaces...
for example if a want to put "filed1 = " and "field2 = " .... in the array , when i want to print all the fields, it only shows... (4 Replies)
Hi all,
I've a .csv file containing data per line delimited with '|' (The fields may contains elements with spaces).
e.g. (really a sample)
ID|Name|fon
12345|Celal Dikici|+4921123456
12346|Celal Dikici Jun.|+4921123456
12347|Celal Dikici Sen.|+4921123456
12348|Celal|+4921123456... (3 Replies)
I want to run an awk split on a value that has been pushed through an array and I was wondering what the syntax should be??
e.g. running time strings through an array and trying to examine just minutes:
12:25:30
10:15:13
08:55:23
awk '
NR==FNR{
... (2 Replies)
How do i split a variable of numbers with spaces... for example
echo "100 100 100 100" > temp.txt
as the values can always change in temp.txt, i think it will be feasible to split the numbers in accordance to column.
How is it possible to make it into $a $b $c $d? (3 Replies)
I have a file, names(i) where each entry is 'first last' name. 'cat names' is fine. But in a shell script
>for file in $(cat names)
> do
> echo $file
> done
the first and last name appear on 2 lines. I have tried escaping and quoting the space but to no avail. The names are to be... (4 Replies)
Hi all,
I want to split a string into array based on given delimiter, for example:
String:
"foo|bar|baz"
with delimiter "|"
into array:
strArr to strArr with values foo, bar and baz.
Thanks a lot.
Roy987 (5 Replies)
value=malayalam
# i need to store the value in an array by splitting the character
#the output i need is
m
a
l
a
y
a
l
a
m
Please use CODE tags for output data as well as required by forum rules! (5 Replies)
Test1.txt
Tom is hot
Test.sh
filename="/directory/Test1.txt"
set - A store
while IFS= read value
do
awk '{split($value,store," ")}'
done < "$filename"
echo ${#sore}
From the code in the executing file, I would like each... (8 Replies)
Discussion started by: TestKing
8 Replies
LEARN ABOUT OPENSOLARIS
logadm.conf
logadm.conf(4) File Formats logadm.conf(4)NAME
logadm.conf - configuration file for logadm command
SYNOPSIS
/etc/logadm.conf
DESCRIPTION
/etc/logadm.conf is the default configuration file for the log management tool logadm(1M). Comments are allowed using the pound character
(#) and extend to the end of line. Each non-comment line has the form:
logname options
where logname is the name of the entry and options are the default command line options for the logadm command. The name of the entry may
be the same as the name of the log file, or a log file name may be given in the options section of the entry. Long lines may be folded
using a backslash followed by a newline to continue an entry on the next line. Single or double quotes may be used to protect spaces or
alternate-style quotes in strings.
The preferred method for changing /etc/logadm.conf is to use the -V, -w, and -r options to the logadm(1M) command, which allow you to
lookup an entry, write an entry, or remove an entry from /etc/logadm.conf.
A full description of how and when /etc/logadm.conf is used and sample entries are found in logadm(1M).
By default, logadm(1M) works in GMT. Therefore, all entries in /etc/logadm.conf will have a GMT timestamp. Users can use the -l option to
set logadm to local time.
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
+-----------------------------+-----------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+-----------------------------+-----------------------------+
|Availability |SUNWcsr |
+-----------------------------+-----------------------------+
|Interface Stability |Evolving |
+-----------------------------+-----------------------------+
SEE ALSO logadm(1M), attributes(5)SunOS 5.11 23 May 2007 logadm.conf(4)