Sponsored Content
Top Forums Shell Programming and Scripting Turn For Loop into While Loop Post 302339851 by cbo0485 on Friday 31st of July 2009 01:25:51 PM
Old 07-31-2009
Quote:
Originally Posted by jim mcnamara
If you need to start at pos 6 then go on to the end of the line change the awk to
Code:
  .| awk '$1>=5000' {print substr($0,6)

is that what you mean?
What I'm wondering is there a way to make it more dynamic, that way, say a log file decides to start growing like crazy at 01, and my crontab just ran, but won't run again for 29 minutes. If it grows enough to where the size field will be longer than the 4 characters it is now, the variable set by the ls command will be off, either it will have an extra space or it will have a number in it, causing the basename/dirname command to fail.

here's the example of when the script was ran and the size was too many digits:

Code:
size not big enough
size not big enough
dirname: too many arguments
Try `dirname --help' for more information.
./sizeTest.sh: line 13: ./rotate*: No such file or directory
dirname: too many arguments
Try `dirname --help' for more information.
./sizeTest.sh: line 13: ./rotate*: No such file or directory
size not big enough

As you can see the size of the log file had too many characters and screwed up the dirname/basename command:

Code:
ls -s $(find . -name nohup*.out) | cut -d'.' -f 1
    92
    32
166066
 10314
   104

Code:
 ls -s $(find . -name nohup*.out) | cut -b 6-100
2 ./path/to/nohupFile.out
2 ./path/to/nohupFile.out
6 ./path/to/nohupFile.out
4 ./path/to/nohupFile.out
4 ./path/to/nohupFile.out

I tried using a '.' as the delimiter, but that screws it up b/c then it delimit's the .out as well, so it doesn't pick up the entire filename.

---------- Post updated at 01:25 PM ---------- Previous update was at 01:18 PM ----------

Played with it a bit more, I think I got the dynamic part down:


Code:
#!/bin/sh
baseDirVar="/opt/user/"
cd ${baseDirVar}
sizeVar=`ls -s $(find . -name nohup*.out) | cut -d'.' -f 1`
for i in $sizeVar
do
        if [ "$i" -ge "1000" ];
                then
                        dirVar=`ls -s $(find . -name nohup*.out) | grep $i | cut -d'.' -f 2`
                        curFile=`basename .${dirVar}.out`
                        curDir=`dirname .${dirVar}.out`
                        cd ${curDir}
#                       ./rotate*
                        pwd;echo "${curDir}/${curFile}"
                        cd ${baseDirVar}
                        curFile=''
                        curDir=''
                else
                        curFile=''
                        curDir=''
                        echo "size not big enough"
                        cd ${baseDirVar}
        fi
done

I cahnged the cut line to do it by period, but then for curFile and curDir I just added the period in front of and the .out behind the variable and the dirname and basename command's ran fine. I had to change it to 1000 for the size, rather than the 5000, that way I'd get some results.

Now, this one ran even a bit slower than before, but that is probably b/c I had like 6 results instead of just 1 or 2.
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

how to get the similar function in while loop or for loop

Dear all How to write the shell script for the following statement: (C programming) for (i=0;i<30;i++) { if i=1 continue *skip this number (To do function here....) ... } similar statement in while loop.... I wrote the script in sh... (3 Replies)
Discussion started by: trynew
3 Replies

2. Shell Programming and Scripting

Is there a better way I could have run this loop. (For loop with two variables)

Sorry for such a dreadful title, but I'm not sure how to be more descriptive. I'm hoping some of the more gurutastic out there can take a look at a solution I came up with to a problem, and advice if there are better ways to have gone about it. To make a long story short around 20K pieces of... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

3. Shell Programming and Scripting

Using variables created sequentially in a loop while still inside of the loop [bash]

I'm trying to understand if it's possible to create a set of variables that are numbered based on another variable (using eval) in a loop, and then call on it before the loop ends. As an example I've written a script called question (The fist command is to show what is the contents of the... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

4. Shell Programming and Scripting

Null Handling in Until loop. . .loop won't stop

Hi Im running this script, which is supposed to find the max value build some tables and then stop running once all the tables are built. Thing is , it keeps assigning a null value to $h and then $g is null so it keep building tables i.e. testupdateNUL. How can I stop this? Here is what I have: ... (4 Replies)
Discussion started by: brandono66
4 Replies

5. Shell Programming and Scripting

BASH loop inside a loop question

Hi all Sorry for the basic question, but i am writing a shell script to get around a slightly flaky binary that ships with one of our servers. This particular utility randomly generates the correct information and could work first time or may work on the 12th or 100th attempt etc !.... (4 Replies)
Discussion started by: rethink
4 Replies

6. Shell Programming and Scripting

How to loop use while loop in csh script?

Hi all, i got 2 text file. file.txt value.txt i want use C shell script to write out while both of the file got different limit....how i going to write it in 1 while loop? (4 Replies)
Discussion started by: proghack
4 Replies

7. Shell Programming and Scripting

Array Variable being Assigned Values in Loop, But Gone when Loop Completes???

Hello All, Maybe I'm Missing something here but I have NOOO idea what the heck is going on with this....? I have a Variable that contains a PATTERN of what I'm considering "Illegal Characters". So what I'm doing is looping through a string containing some of these "Illegal Characters". Now... (5 Replies)
Discussion started by: mrm5102
5 Replies

8. Shell Programming and Scripting

Reset while loop to loop same file multiple times

Hi, I want to read file multiple times. Right now i am using while loop but that is not working. ex. While read line do while read line2 do echo stmt1 #processing some data based on data., done < file2.txt done < file1.txt # This will have 10... (4 Replies)
Discussion started by: tmalik79
4 Replies

9. Shell Programming and Scripting

awk loop using array:wish to store array values from loop for use outside loop

Here's my code: awk -F '' 'NR==FNR { if (/time/ && $5>10) A=$2" "$3":"$4":"($5-01) else if (/time/ && $5<01) A=$2" "$3":"$4-01":"(59-$5) else if (/time/ && $5<=10) A=$2" "$3":"$4":0"($5-01) else if (/close/) { B=0 n1=n2; ... (2 Replies)
Discussion started by: klane
2 Replies

10. Shell Programming and Scripting

For loop or while loop from a text file

Hi all, i developed a script to measure the uptime of a process in a Solaris 10/11 environments. All is well, but i came across a situation where there are multiple processes of the same name. Basically i have the following result file: beVWARS 13357 19592122 beVWARS 14329 19591910... (4 Replies)
Discussion started by: nms
4 Replies
All times are GMT -4. The time now is 01:17 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy