awk help to make my work faster


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk help to make my work faster
# 1  
Old 12-25-2008
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 file2.txt
the file2.txt consist of more than 600000(6 lakhs ) of record.
i have written code as
while read line; do
x=`echo $line|awk '{print $4}'`
m=`echo "${x}"|sed 's/"//g'"`
awk '{if(NR=='$m') {print $0>>"desriredfile"}}' file2.txt
done<file1.txt

this command works.. but the thing is that this is slow ..as it read whole file every time for each line number.
can a code be written so that it reads the whole file (file2.txt) only once ?
thanks for help??Smilie
# 2  
Old 12-25-2008
0.6 M don't seem to be a big number ( I guess )
load everything to memory with a map as

line_no => line_no_contents

then do a lookup with line_no, its done then Smilie
# 3  
Old 12-25-2008
Here is an example on how to do that in perl, please tweak according to the needs

Code:
#! /opt/third-party/bin/perl

# map line number and contents in the file

my %fileHash = ();
my $lfh;
open($lfh, "<", "file_1") or die "Unable to open file : file_1 <$!>\n";

while ( <$lfh> ) {
  chomp;
  $fileHash{$.} = $_;
}

close($lfh);

# open file that contains line numbers for which data needs to be extracted from the other file 

open($lfh, "<", "file_2") or die "Unable to open file : file_2 <$!>\n";

while( <$lfh> ) {
  chomp;
  print "Here is the information " , $fileHash{$_} , "\n";
}

close($lfh);

exit(0)

# 4  
Old 12-25-2008
thanks for reply matrixmadhan

well i need a shell script for this... i have no idea about pearl.. how much time will it take in pearl.. it takes about more than one day.. to complete. its high time for me know ... i should find some idea ...
# 5  
Old 12-25-2008
Quote:
Originally Posted by kumar_amit
well i need a shell script for this... i have no idea about pearl.. how much time will it take in pearl.. it takes about more than one day.. to complete. its high time for me know ... i should find some idea ...
0.6M really is not a big number ( I hope so )

just give it a try and you can find the time taken for this to run.

May be try benchmarking with 100K records with your shell script method and the above perl version will help you to identify at the overall time that this could take ( but again, its an approximation )

Let us know if you are struck somewhere
# 6  
Old 12-25-2008
Quote:
Originally Posted by kumar_amit
x=`echo $line|awk '{print $4}'`
m=`echo "${x}"|sed 's/"//g'"`
replace with
Code:
x=`echo $line|awk '{print int($4)}'`

and will save you few hours Smilie 2 system calls per $line
Post some ample data using [code] tags and maybe we can speed up your script. The output of wc for each file can be useful.
# 7  
Old 12-25-2008
thanks danmero for ur valuable time

but can't something be done inside awk . so that it reads the bigger file once and give the desired output..
here it is reading the file again and again after getting the line number

thanks
amitSmilie
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

Make script faster

Hi all, In bash scripting, I use to read files: cat $file | while read line; do ... doneHowever, 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: I run next script: cat $line | while read line; do ## Reads each... (10 Replies)
Discussion started by: AlbertGM
10 Replies

6. 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

7. 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

8. 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

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