Sponsored Content
Special Forums UNIX and Linux Applications Infrastructure Monitoring Possible performance improvement (Bash and flat file) Post 302420432 by Corona688 on Tuesday 11th of May 2010 03:02:53 PM
Old 05-11-2010
Wow, yeah... whenever you have

Code:
something="`echo $variable`

just do
Code:
something="$variable"

Also,

Code:
ping -c 2 $line > /dev/null 2>&1
status=`echo $?`
if [ $status -eq 0 ]
then
...

can just be
Code:
if ping -c 2 $line > /dev/null 2>&1
then
...

Also, I'm not entirely sure what this line is doing:

Code:
if [ "$line" ]

...but if you're guarding against blank lines:

Code:
if [ ! -z "${line}" ]
...

Or better yet, do this. It will skip blank lines without another layer of nested if at all:

Code:
[ -z "${line}" ] && continue

Constructs like these are extremely slow since they can run cut uncountable numbers of times.

Code:
value1=`echo $value | cut -d ' ' -f $i`

Instead, since you're using a shell that supports arrays, just split it into an array once then use the array. This should split fine on spaces:

Code:
ARRAY=( $value )

...

value1="${ARRAY[$i]}"

You can also split on other characters by changing the IFS variable but be aware that this affects read too.

You're running grep many, many times per loop. This is slow. Instead of
Code:
if ! grep file string1 ; then str=no ; fi
if ! grep file string2 ; then str=no ; fi
...

try
Code:
HAS1=0
HAS2=0
HAS3=0
HAS4=0
while read TESTLINE
do
        [[ "${TESTLINE}" =~ $string1 ]] && HAS1=1
        [[ "${TESTLINE}" =~ $string2 ]] && HAS2=1
        [[ "${TESTLINE}" =~ $string3 ]] && HAS3=1
        [[ "${TESTLINE}" =~ $string4 ]] && HAS4=1
done < file
OKAY=0
[ "$HAS1" -gt 0 ] && [ "$HAS2" -gt 0 ] && [ "${HAS3}" -gt 0 ] && [ "${HAS4}" -gt 0 ] && OKAY=1

This reads the file only once and doesn't execute four extra processes. Note that the ~= regular expression operator only works in bash.

Whenever you have VAR=`something | grep something | grep something | grep something` that's an enormous performance waster, and likely possible with shell built-ins, though exactly how depends on what bits you want to get.

...and so forth and so forth. Your script is enormous. You might want to break it into functions so you can tell what's happening where. Functions are easy:

Code:
function myfunc
{
  echo $1 $2
}

myfunc a b

They act like processes in that they return numbers, not strings, and output to stdin/stdout/stderr. But they can set global variables (as long as they're not behind a pipe).

The advanced bash scripting guide is a nice reference.
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help with Flat Files Please!! BASH (New User)

Hello All, I am brand new to the UNIX world and so far and very intrigued and enjoy scripting. This is just a new language for me. I would really like assistance with the below request. Any help would be greatly appreciated! I want to create a flat file in Vi that has a header field and... (0 Replies)
Discussion started by: cyberjax21
0 Replies

2. Programming

File - reading - Performance improvement

Hi All I am reading a huge file of size 2GB atleast. I am reading each line and cutting certain columns and writing it to another file. Here is the logic. int main() { string u_line; string Char_List; string u_file; int line_pos; string temp_form_u_file; ... (10 Replies)
Discussion started by: dhanamurthy
10 Replies

3. Shell Programming and Scripting

Any improvement possible in this script

Hi! Thank you for the help yesterday This is the finished product There is one more thing I would like to do to it but I’m not to certain On how to proceed I would like to log all output to a log in order to Be able to roll back This script is meant to be used in repairing a... (4 Replies)
Discussion started by: Ex-Capsa
4 Replies

4. UNIX for Advanced & Expert Users

linux os improvement

can anyone help to share the knowledge on linux os improvement? 1) os account - use window AD authentication, such as ldap, but how to set /etc/passwd, where to put user home? 2) user account activity - how to log os user activity share the idea and what tools can do that...thx (5 Replies)
Discussion started by: goodbid
5 Replies

5. Shell Programming and Scripting

Display-performance in terminal, bash or python?

Heyas I've been working on my project TUI (Text User Interface) for quite some time now, its a hobby project, so nothing i sit in front of 8hrs/day. Since the only 'real' programming language i knw is Visual Basic, based upon early steps with MS-Batch files. When i 'joined' linux 3 years ago,... (7 Replies)
Discussion started by: sea
7 Replies

6. Shell Programming and Scripting

[BASH] Performance question - Script to STDOUT

Hello Coders Some time ago i was asking about python and bash performances, and i was told i could post the regarding code, and someone would kindly help to make it faster (if possible). If you have noted, i'm on the way to finalize, finish, stable TUI - Text(ual) User Interface. It is a... (6 Replies)
Discussion started by: sea
6 Replies

7. Shell Programming and Scripting

Performance improvement in grep

Below script is used to search numeric data from around 400 files in a folder. I have 300 such folders. Need help in performance improvement in the script. Below Script searches 20 such folders ( 300 files in each folder) simultaneously. This increases cpu utilization upto 90% What changes... (3 Replies)
Discussion started by: vegasluxor
3 Replies

8. Shell Programming and Scripting

Bash - array loop performance

Hi, another little question... "sn" is an array whose elements can vary from about 55,000 to about 150,000 elements. Each element consists of an integer between 0-255, eg: ${sn} contain the value: 103 . For a decrypt-procedure I need scroll all the elements 4 or 5 times. Here is an example of... (15 Replies)
Discussion started by: math4
15 Replies

9. OS X (Apple)

Create a bash array from a flat file of whitespaces only.

Hi guys and gals... MacBook Pro. OSX 10.13.2, default bash terminal. I have a flat file 1920 bytes in size of whitespaces only. I need to put every single whitespace character into a bash array cell. Below are two methods that work, but both are seriously ugly. The first one requires that I... (7 Replies)
Discussion started by: wisecracker
7 Replies

10. Shell Programming and Scripting

Bash script search, improve performance with large files

Hello, For several of our scripts we are using awk to search patterns in files with data from other files. This works almost perfectly except that it takes ages to run on larger files. I am wondering if there is a way to speed up this process or have something else that is quicker with the... (15 Replies)
Discussion started by: SDohmen
15 Replies
All times are GMT -4. The time now is 11:46 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy