The solution :
Code:
Upgrade Processor
Add Memory
....
Or cheaper :
I tried the mike script with an input file with 278000 records :
Code:
> time mike.sh > mike.out
real 0m59.113s
user 0m53.338s
sys 0m4.184s
I wrote a full awk solution, with the same input file the result is :
Code:
> time gawk -f tickets2.awk tickets2.txt
real 0m39.636s
user 0m37.733s
sys 0m1.078s
Code:
BEGIN {
FS = ",";
Columns = 9;
Rows = 3;
TotalEntries = Columns * Rows;
RowEntries = 5; # Valid (not 00) entries per row
}
function add_ticket_error(err) {
TicketError = TicketError "\n* " err;
}
function new_ticket() {
TicketError = "";
}
function print_ticket( f,t,r,c) {
if (TicketError) {
print $0 "\n" "* Input ticket #" FNR >FileErr;
print TicketError >FileErr;
} else {
f=0; t="";
for (r=1; r<=Rows; r++) {
for (c=1; c<=Columns; c++) {
t = t (c>1 ? FS : "") $(++f);
}
t = t "\n";
}
print t >FileOk
}
}
FNR==1 {
FileOk = FILENAME ".ok";
FileErr = FILENAME ".err";
}
{
new_ticket();
if (NF != TotalEntries) {
add_ticket_error("invalid entries count : " NF);
print_ticket();
next;
}
ticket_entry = 0;
for (row=1; row<=Rows; row++) {
entries = 0;
for (col=1; col<=Columns; col++) {
ticket_entry++;
if ($ticket_entry !~ /^[0-9][0-9]$/) {
add_ticket_error("Invalid entry #" ticket_entry ", value=" $ticket_entry);
continue;
}
if ($ticket_entry == "00") continue;
entries++;
if (row != 1) {
if ($ticket_entry <= $(ticket_entry-Columns) && $(ticket_entry-Columns) != "00" ) {
add_ticket_error("Entry #" ticket_entry \
"breaks ascending order for column #" col)
}
}
}
if (entries != RowEntries) {
add_ticket_error("Invalid entries count for row #" row \
", count=" entries);
}
}
print_ticket();
}