Help speeding up script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help speeding up script
# 1  
Old 04-27-2015
Help speeding up script

This is my first experience writing unix script. I've created the following script. It does what I want it to do, but I need it to be a lot faster. Is there any way to speed it up?

Code:
cat 'Tax_Provision_Sample.dat' | sort | while read p; do fn=`echo $p|cut -d~ -f2,4,3,8,9`; echo $p >> "$fn.txt"; done

Thank you.

Last edited by vgersh99; 04-27-2015 at 07:21 PM.. Reason: code tags, please!
# 2  
Old 04-27-2015
Hi

You could use sort directly instead of cat.
Cant say anything else without the content of the Tax_Provision_sample.dat.

hth
# 3  
Old 04-28-2015
Test this' (bashism's) run time
Code:
IFS="~"; while read -a p; do echo "${p[*]}" >> "${p[1]}${p[3]}${p[2]}${p[7]}${p[8]}.txt"; done <Tax_Provision_Sample.dat

You may want to save the old IFS beforehand. If need be, you can pipe sort's output into the loop.
This User Gave Thanks to RudiC For This Post:
# 4  
Old 04-28-2015
It's because you're running an external program for each line.

Here is an awk solution:

Code:
sort Tax_Provision_Sample.dat | awk -F~ '{f=$2 FS $4 FS $3 FS $8 FS $9 ".txt"; print $0 >> f; close(f);}'


Last edited by neutronscott; 04-28-2015 at 01:31 PM.. Reason: >>
This User Gave Thanks to neutronscott For This Post:
# 5  
Old 04-28-2015
Wow. That was a lot faster. Thanks!
# 6  
Old 04-28-2015
Quote:
Originally Posted by RudiC
Test this' (bashism's) run time
Code:
IFS="~"; while read -a p; do echo "${p[*]}" >> "${p[1]}${p[3]}${p[2]}${p[7]}${p[8]}.txt"; done <Tax_Provision_Sample.dat

You may want to save the old IFS beforehand. If need be, you can pipe sort's output into the loop.
You don't need to save IFS if you run it in a subshell:
Code:
(IFS="~"; while read -a p; do echo "${p[*]}" >> "${p[1]}${p[3]}${p[2]}${p[7]}${p[8]}.txt"; done) <Tax_Provision_Sample.dat

Code:
sort Tax_Provision_Sample.dat | (...)

This User Gave Thanks to MadeInGermany For This Post:
# 7  
Old 04-28-2015
Quote:
Originally Posted by neutronscott
It's because you're running an external program for each line.

Here is an awk solution:

Code:
sort Tax_Provision_Sample.dat | awk -F~ '{f=$2 FS $4 FS $3 FS $8 FS $9 ".txt"; print $0 > f; close(f);}'

Note that each file will only contain one line of the original file, namely the last occurence of a particular combination of those fields. If there can be more than one line with that combination you need to use >> instead of >, but you would need to empty the files beforehand...
This User Gave Thanks to Scrutinizer 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

Help with speeding up my working script to take less time - how to use more CPU usage for a script

Hello experts, we have input files with 700K lines each (one generated for every hour). and we need to convert them as below and move them to another directory once. Sample INPUT:- # cat test1 1559205600000,8474,NormalizedPortInfo,PctDiscards,0.0,Interface,BG-CTA-AX1.test.com,Vl111... (7 Replies)
Discussion started by: prvnrk
7 Replies

2. Shell Programming and Scripting

Help 'speeding' up this 'parsing' script - taking 24+ hours to run

Hi, I've written a ksh script that read a file and parse/filter/format each line. The script runs as expected but it runs for 24+ hours for a file that has 2million lines. And sometimes, the input file has 10million lines which means it can be running for more than 2 days and still not finish.... (9 Replies)
Discussion started by: newbie_01
9 Replies

3. Shell Programming and Scripting

Speeding up shell script with grep

HI Guys hoping some one can help I have two files on both containing uk phone numbers master is a file which has been collated over a few years ad currently contains around 4 million numbers new is a file which also contains 4 million number i need to split new nto two separate files... (4 Replies)
Discussion started by: dunryc
4 Replies

4. Shell Programming and Scripting

Speeding up substitutions

Hi all, I have a lookup table from which I am looking up values (from col1) and replacing them by corresponding values (from col2) in another file. lookup file a,b c,d So just replace a by b, and replace c by d. mainfile a,fvvgeggsegg,dvs a,fgeggefddddddddddg... (7 Replies)
Discussion started by: senhia83
7 Replies

5. Shell Programming and Scripting

Speeding up search and replace in a for loop

Hello, I am using sed in a for loop to replace text in a 100MB file. I have about 55,000 entries to convert in a csv file with two entries per line. The following script works to search file.txt for the first field from conversion.csv and then replace it with the second field. While it works fine,... (15 Replies)
Discussion started by: pbluescript
15 Replies

6. Shell Programming and Scripting

speeding up bash script with "while read line"

Hello everybody, I'm still slowly treading my way into bash scripting (without any prior programming experience) and hence my code is mostly what some might call "creative" if they meant well :D I have created a script that serves its purpose but it does so very slowly, since it needs to work... (4 Replies)
Discussion started by: origamisven
4 Replies

7. UNIX for Dummies Questions & Answers

Speeding/Optimizing GREP search on CSV files

Hi all, I have problem with searching hundreds of CSV files, the problem is that search is lasting too long (over 5min). Csv files are "," delimited, and have 30 fields each line, but I always grep same 4 fields - so is there a way to grep just those 4 fields to speed-up search. Example:... (11 Replies)
Discussion started by: Whit3H0rse
11 Replies

8. UNIX for Dummies Questions & Answers

Speeding up a Shell Script (find, grep and a for loop)

Hi all, I'm having some trouble with a shell script that I have put together to search our web pages for links to PDFs. The first thing I did was: ls -R | grep .pdf > /tmp/dave_pdfs.outWhich generates a list of all of the PDFs on the server. For the sake of arguement, say it looks like... (8 Replies)
Discussion started by: Dave Stockdale
8 Replies

9. Shell Programming and Scripting

Speeding up processing a file

Hi guys, I'm hoping you can help me here. I've knocked up a script that looks at a (huge) log file, and pulls from each line the hour of each transaction and how long each transaction took. The data is stored sequentially as: 07:01 blah blah blah 12456 blah 07:03 blah blah blah 234 blah... (4 Replies)
Discussion started by: dlam
4 Replies

10. Shell Programming and Scripting

speeding up the compilation on SUN Solaris environment

Dear friends, Please let me know how do I increase the speed of my compilation in SUN Solaris environment. actually I have many subfolders which contains .cc files. when I compile makefile at the root it will take much time to compile all the subfolders and generates object(.o) files. Can... (2 Replies)
Discussion started by: swamymns
2 Replies
Login or Register to Ask a Question