![]() |
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| To call/execute a shell script from a shell script | konark | UNIX for Dummies Questions & Answers | 1 | 10-26-2007 06:16 PM |
| how to execute shell commands in awk script? | RishiPahuja | Shell Programming and Scripting | 1 | 09-02-2005 10:37 AM |
| Execute Shell Script | sam71 | UNIX for Dummies Questions & Answers | 1 | 04-29-2005 02:43 PM |
| Is it possible to execute shell script with PHP? | Micz | Shell Programming and Scripting | 1 | 05-27-2004 12:52 PM |
| How to execute shell Script? | siva | Shell Programming and Scripting | 3 | 05-14-2002 12:07 PM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Shell script is taking more than 3 hrs to execute
Hi
I am doing a process of converting all the values of key column into a row, for eg Key col1 col2 1 1 1 1 2 1 1 1 3 1 3 1 2 1 1 2 1 2 What I am doing in the Script is convert this data into 1(key)|1:2:1:3 (All Col1 values),1:1:3:1(all col2 values) 2(key)|1:1,1:2 TO achieve this i am using two while loops and 4 If else loops Now in my production the number of columns are 4 and the number records in the input file are 0.2 million (2 lac) and this script is taking more than 3 hrs to run. Any idea on how to minimize the execution time? |
|
||||
|
No error checking ! Not complete !
Using hash, this should be super-fast ! ![]() Code:
#! /opt/third-party/bin/perl
open(FILE, "<", "r");
while(<FILE>) {
next if(/^$/);
chomp;
my @arr = split(/ /);
my @val = split(/,/, $fileHash{$arr[0]});
$val[0] .= (":" . $arr[1]);
$val[1] .= (":" . $arr[2]);
$val[0] .= ("," . $val[1]);
$val[0] =~ s/,:/,/;
$val[0] =~ s/^://;
$fileHash{$arr[0]} = $val[0];
}
close(FILE);
foreach my $k ( keys %fileHash ) {
print "$k $fileHash{$k}\n";
}
exit 0
|
|
||||
|
awk
Hi,
This one should be ok. input: Code:
1 1 1 1 2 1 1 1 3 1 3 1 2 1 1 2 1 2 3 1 1 4 2 1 4 1 3 1 3 1 2 1 1 2 1 2 Code:
2|1:1:1:1|1:1:1:1 3|1|1 4|2:1|2:1 1|1:2:1:3:3|1:2:1:3:3 Code:
awk '
{
if (NF>1)
{
col[$1]=$1
if (col1[$1]=="")
col1[$1]=$2
else
col1[$1]=sprintf("%s:%s",col1[$1],$2)
if (col2[$1]=="")
col2[$1]=$2
else
col2[$1]=sprintf("%s:%s",col2[$1],$2)
}
}
END{
for (i in col)
print i"|"col1[i]"|"col2[i]
}' filename
|
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|