Its reading only the first line in the logpath file and when IF condition is executed, its comes out of the loop.Its not reading the next line in logpath file.I want it to read the next line as well and check in that path also.
#!/bin/bash
> /try/updating
> /try/notupdating
###Script to find out whether logs are getting updated in last 15 min.
a=$(date +"%Y-%m-%d %T")
echo "Current Time :$a"
b=$(date +"%Y-%m-%d %T" --date="15 mins ago")
echo "Time before 15 Mins :$b"
while read server
do
echo "=> processing logs on ${server}"
echo "=> path to be checked"
grep $server /try/list | awk {'print $2'} > /try/logpath
while read logpath
do
count=`ssh $server tail -1 $logpath/log.0 | awk '$0>=from&&$0<=to' from="$b" to="$a" | wc -l`
if [ $count -gt 0 ]
then
echo "$server $logpath Logs are updating" >>/try/updating
else
echo "$server $logpath Please Check Logs are not updating" >>/try/notupdating
fi
done < /try/logpath
done < /try/server
A while loop with redirection or piped input reads from stdin. Ssh by default also reads stdin and ends up reading the remainder of the data intended for the while.
Add -n to your ssh command to prevent it from reading from stdin.
Last edited by agama; 02-19-2012 at 11:40 PM..
Reason: clairity
The awk statement doesn't seem to be working the way you intend it to.
1. Keep date in this format for easier numeric comparison: yyyymmddhhmiss (20120220034005). Two such numbers are easier for comparison.
2. If date is in this format: "2012-02-20 03:40:05", how can you compare it with some other date in the same format using > and < symbols?
3. When you say $0 in awk, it refers to the whole line. I see that log.0 file contains lines in this format: "2012-02-18 22:18:06.768 | STATUS:SUCCESS", so you're trying to compare this whole line with $a and $b.
4. You can reduce this line to "2012-02-18 22:18:06" by defining the field separator as "." and taking $1 into account. And further reduce it to "20120218221806" by removing hyphen and colon.
These 2 Users Gave Thanks to balajesuri For This Post:
The awk statement doesn't seem to be working the way you intend it to.
1. Keep date in this format for easier numeric comparison: yyyymmddhhmiss (20120220034005). Two such numbers are easier for comparison.
2. If date is in this format: "2012-02-20 03:40:05", how can you compare it with some other date in the same format using > and < symbols?
3. When you say $0 in awk, it refers to the whole line. I see that log.0 file contains lines in this format: "2012-02-18 22:18:06.768 | STATUS:SUCCESS", so you're trying to compare this whole line with $a and $b.
4. You can reduce this line to "2012-02-18 22:18:06" by defining the field separator as "." and taking $1 into account. And further reduce it to "20120218221806" by removing hyphen and colon.
You are Right!!!
---------- Post updated at 11:15 PM ---------- Previous update was at 11:14 PM ----------
Quote:
Originally Posted by agama
A while loop with redirection or piped input reads from stdin. Ssh by default also reads stdin and ends up reading the remainder of the data intended for the while.
Add -n to your ssh command to prevent it from reading from stdin.
Thank you so much ..Scripting is reading the lines..Thanks again
---------- Post updated at 11:39 PM ---------- Previous update was at 11:15 PM ----------
My log file will have only this format 2012-02-18 22:18:06.768...Is it a way that we can compare any two dates...irrespective of the date format in the log file.
For format 1 and 2, you have to do further processing. Here an example to parse format #2.
Code:
#! /bin/bash
a='19/FEB/2012 13:55:36'
x=( JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC )
for mon in `seq 0 11`
do
if [ "${a:3:3}" == "${x[mon]}" ]
then
mon=$(($mon + 1))
break
fi
done
b=${a:7:4}$(printf "%02d" $mon)${a:0:2}${a:12:2}${a:15:2}${a:18:2}
echo $b
I am trying to have the below batch file do following two things:
1. only allow the values YES,yes,Y,y, or NO,no,N,n
2. increment the counter %var1 only if answer to question 2 is "y" and not able to get the syntax correct. If %var1%=1 then I am trying to display function :end. Thank you :).... (0 Replies)
Hello,
I'm using RHEL 5.1 with bash. How to handle "read" inside while loop reading every line? Please see below:
# cat /tmp/passwd_sample
CARRJ12:qVSn4ja4mFA72,..:20021:125:JULIAN CARR:/home/everyone:/bin/bash
HERCOT01:NK/3j2ZB4ZC7Q:20022:125:TOM HERCOCK:/home/everyone:/bin/bash... (4 Replies)
Hi,
I want to read a live log file line by line and considering those line which start from time stamp;
Below code I am using, which read line but throws an exception when comparing line that does not contain error code
tail -F /logs/COMMON-ERROR.log | while read myline; do... (2 Replies)
Hello Team,
i have to read line by line in a while loop, and the input file has:.
# The script will start cppunit test application to run unit tests.
-LD_LIBRARY_PATH=$CPPUNIT_HOME/lib:\
+LD_LIBRARY_PATH=$VOBTAG/SS_UnitTest/lib:\
$VOBTAG/SS_BFD/BFDSCLI/build:\
... (7 Replies)
Hi,
Need some help...
I want to execute sequence commands, like below
test1.sh
test2.sh
...etc
test1.sh file will generate log file, we need to search for 'complete' string on test1.sh file, once that condition success and then it should go to test2.sh file, each .sh scripts will take... (5 Replies)
I have written a script to read the file line by line.
It is reading and printing the lines.
But it is coming out of loop before reading last line.
So I am not able to print last line.
How do I solve it. (6 Replies)
So, I want to read line-by-line a text file with unknown number of files....
So:
a=1
b=1
while ; do
b=`sed -n '$ap' test`
a=`expr $a + 1`
$here do something with b etc
done
the problem is that sed does not seem to recognise the $a, even when trying
sed -n ' $a p'
So, I cannot read... (3 Replies)
hi all,
i have a while loop which i am using to read lines into an array:
k=0
exec 10<file
while read LINE <&10; do
ARRAY=$LINE
((k++))
done
exec 10>&-
echo ${ARRAY}
for some reason when i display the array it is not showing the last row in the file.
any help appreciated. (1 Reply)
Hello All,
Request you to let me know how to do the below urgently..
Requirement
File A Contains:
for i in file A
DEV1
DEV5
STG1
STG5
File B Contains:
for j in file B
DEV1
DEV5
STG1
STG5 (3 Replies)