Make script faster


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Make script faster
# 1  
Old 12-22-2011
Make script faster

Hi all,

In bash scripting, I use to read files:
Code:
cat $file | while read line; do
...
done

However, it's a very slow way to read file line by line.
E.g. In a file that has 3 columns, and less than 400 rows, like this:
Quote:
J23 21009853172000102416 15
G95 21009853122000006554 27
[...]
I run next script:
Code:
cat $line | while read line; do  ## Reads each line
   grup=`echo "$line" | cut -d " " -f3`;  ## Takes third column
   if [ "$grup" == "27" ]; then  // ## If column == "27" prints column 2. 
      exp=`echo "$line"  | cut -d " " -f2`; 
      echo $exp; 
   fi; 
done;

Using "time" command it lasts:
Quote:
real 1m49.543s
user 0m42.606s
sys 1m5.229s
It's a huge waste of time to read only less than 400 rows. Is there any way to make it faster?
Occasionally I used awk to process a file line by line, and it is much faster. Why? Any hint to read a file in bash?

Thanks a lot

Albert.
# 2  
Old 12-22-2011
Try this:
Code:
awk '$3==27{print $2}' file

This User Gave Thanks to Franklin52 For This Post:
# 3  
Old 12-22-2011
@albertGM how to check the run time consumed by a script....?
# 4  
Old 12-22-2011
use time command

Code:
$ time echo "hello"
hello
real    0m0.000s
user    0m0.000s
sys     0m0.000s

# 5  
Old 12-22-2011
consider if there is script called myscript.sh.. so to find the execution time i need to run it like this..?
Code:
 
$time ./myscript.sh

and also in real, user and sys which one is the actual time?
# 6  
Old 12-22-2011
You spend lots of time looping round and demanding in cut again & again. Each time, you start a new process so the system spends effort there. The awk answer is probably the way to go if you are comfortable, however you can simplify you script by using the read statement better:-
Code:
cat $line | while read first second third rest; do  ## Reads each line into separate variables
   if [ "$third" == "27" ]; then  // ## If column == "27" prints column 2. 
        echo $second; 
   fi; 
done;

I did an "Ask Jeeves" search with +bash +read specified and got quite a few examples.

As for the time command, have a read of the man page. The main figure though is real as this will be the elapsed time you will experience.


I hope that this helps.



Robin
Liverpool/Blackburn
UK

Last edited by rbatte1; 12-22-2011 at 07:42 AM.. Reason: Added comments about the time command
These 2 Users Gave Thanks to rbatte1 For This Post:
# 7  
Old 12-22-2011
Quote:
Originally Posted by rbatte1
You spend lots of time looping round and demanding in cut again & again. Each time, you start a new process so the system spends effort there. The awk answer is probably the way to go if you are comfortable, however you can simplify you script by using the read statement better:-
Code:
cat $line | while read first second third rest; do  ## Reads each line into separate variables
   if [ "$third" == "27" ]; then  // ## If column == "27" prints column 2. 
        echo $second; 
   fi; 
done;

I did an "Ask Jeeves" search with +bash +read specified and got quite a few examples.

As for the time command, have a read of the man page. The main figure though is real as this will be the elapsed time you will experience.


I hope that this helps.



Robin
Liverpool/Blackburn
UK
Useless Use of Cat, this is suffice:

Code:
while read first second third rest; do  ## Reads each line into separate variables
   if [ "$third" == "27" ]; then  // ## If column == "27" prints column 2. 
        echo $second; 
   fi; 
done < $line

This User Gave Thanks to Franklin52 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to make faster loop in multiple directories?

Hello, I am under Ubuntu 18.04 Bionic. I have one shell script run.sh (which is out of my topic) to run files under multiple directories and one file to control all processes running under those directories (control.sh). I set a cronjob task to check each of them with two minutes of intervals.... (3 Replies)
Discussion started by: baris35
3 Replies

2. Shell Programming and Scripting

How to make awk command faster for large amount of data?

I have nginx web server logs with all requests that were made and I'm filtering them by date and time. Each line has the following structure: 127.0.0.1 - xyz.com GET 123.ts HTTP/1.1 (200) 0.000 s 3182 CoreMedia/1.0.0.15F79 (iPhone; U; CPU OS 11_4 like Mac OS X; pt_br) These text files are... (21 Replies)
Discussion started by: brenoasrm
21 Replies

3. Shell Programming and Scripting

How to make awk command faster?

I have the below command which is referring a large file and it is taking 3 hours to run. Can something be done to make this command faster. awk -F ',' '{OFS=","}{ if ($13 == "9999") print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12 }' ${NLAP_TEMP}/hist1.out|sort -T ${NLAP_TEMP} |uniq>... (13 Replies)
Discussion started by: Peu Mukherjee
13 Replies

4. Shell Programming and Scripting

awk changes to make it faster

I have script like below, who is picking number from one file and and searching in another file, and printing output. Bu is is very slow to be run on huge file.can we modify it with awk #! /bin/ksh while read line1 do echo "$line1" a=`echo $line1` if then echo "$num" cat file1|nawk... (6 Replies)
Discussion started by: mirwasim
6 Replies

5. Shell Programming and Scripting

Running rename command on large files and make it faster

Hi All, I have some 80,000 files in a directory which I need to rename. Below is the command which I am currently running and it seems, it is taking fore ever to run this command. This command seems too slow. Is there any way to speed up the command. I have have GNU Parallel installed on my... (6 Replies)
Discussion started by: shoaibjameel123
6 Replies

6. Shell Programming and Scripting

How to make copy work faster

I am trying to copy a folder which contains a list of C executables. It takes 2 mins for completion,where as the entire script takes only 3 more minutes for other process. Is there a way to copy the folder faster so that the performance of the script will improve? (2 Replies)
Discussion started by: prasperl
2 Replies

7. Red Hat

Re:How to make the linux pc faster

Hi, Can any one help me out in solving the problem i have a linux database server it is tooo slow that i am unable to open even the terminial is there any solution to get rid of this problem.How to make this server faster. Thanks & Regards Venky (0 Replies)
Discussion started by: venky_vemuri
0 Replies

8. Shell Programming and Scripting

awk help to make my work faster

hii everyone , i have a file in which i have line numbers.. file name is file1.txt aa bb cc "12" qw xx yy zz "23" we bb qw we "123249" jh here 12,23,123249. is the line number now according to this line numbers we have to print lines from other file named... (11 Replies)
Discussion started by: kumar_amit
11 Replies

9. Shell Programming and Scripting

Can anyone make this script run faster?

One of our servers runs Solaris 8 and does not have "ls -lh" as a valid command. I wrote the following script to make the ls output easier to read and emulate "ls -lh" functionality. The script works, but it is slow when executed on a directory that contains a large number of files. Can anyone make... (10 Replies)
Discussion started by: shew01
10 Replies

10. Solaris

looking for different debugger for Solaris or to make sunstudio faster

im using the sunstudio but it is very slow , is there ant other GUI debugger for sun Solaris or at list some ways to make it faster ? im using to debug throw telnet connection connected to remote server thanks (0 Replies)
Discussion started by: umen
0 Replies
Login or Register to Ask a Question