Go Back   Το UNIX και Linux Forums > Top Forums > Ο προγραμματισμός και η Shell Scripting
.
Google Site



Ο προγραμματισμός και η Shell Scripting Post ερωτήσεις για KSH, CSH, SH, BASH, Perl, PHP, sed, AWK ΑΛΛΑ και shell scripts και shell scripting γλώσσα εδώ.

Closed Thread
English Japanese Spanish French German Portuguese Italian Powered by Powered by Google
 
Εργαλεία Θέματος Αναζήτηση αυτό το νήμα Βαθμολογήστε Νήμα Display Modes
  #1 (Permalink)  
Old 04-08-2009
Εγγεγραμμένος χρήστης
 

Join Ημερομηνία: Απρίλιος 2009
Θέσεις: 2
Επιδόσεις log parsing shell script πολύ αργή

Γειά,
Είμαι απόλυτη newbie και ό, τι έχω γράψει στο σενάριο κέλυφος (παρακάτω) Όλα αυτά έχουν κατασκευαστεί με τη γενναιόδωρη βοήθεια από googling το καθαρό και αυτό το φόρουμ. Παρακαλώ συγχωρήστε κάθε μαθητής λάθη.

Τώρα για το qn, αρχείο εισόδου μου μοιάζει με αυτό --

2009:04:03 08:21:41:513, INFO, όνομα_διακομιστή, εεεε, απροσδιόριστο,, INFO, null ,..... Out: xxService, Έναρξη - SvcName: OIS - EndUserName: - RequestId: null20090403082313
2009:04:03 08:21:41:775, INFO, όνομα_διακομιστή, εεεε, απροσδιόριστο,, INFO, null ,..... Out: xxService, End - SvcName: OIS - EndUserName: - RequestId: null20090403082313 - StatusCode: 0 - StatusText: Επιτυχία
2009:04:03 08:21:45:660, INFO, όνομα_διακομιστή, εεεε, απροσδιόριστο,, INFO, null ,..... Out: xxService, Έναρξη - SvcName: VCC - EndUserName: - RequestId: 411111111111111120090403082318
2009:04:03 08:21:46:171, INFO, όνομα_διακομιστή, εεεε, απροσδιόριστο,, INFO, null ,..... Out: xxService, End - SvcName: VCC - EndUserName: - RequestId: 411111111111111120090403082318 - StatusCode: 0 - StatusText: Επιτυχία
2009:04:03 08:21:49:583, INFO, όνομα_διακομιστή, εεεε, απροσδιόριστο,, INFO, null ,..... Out: xxService, Έναρξη - SvcName: CO - EndUserName: - RequestId: 20090403082321
2009:04:03 08:22:03:571, INFO, όνομα_διακομιστή, εεεε, απροσδιόριστο,, INFO, null ,..... Out: xxService, End - SvcName: CO - EndUserName: - RequestId: 20090403082321 - StatusCode: 0 - StatusText: Επιτυχία

Από αυτό που έχω να μάθω την ώρα resp (ώρα έναρξης - ώρα λήξης) για κάθε αίτηση για την id SvcName ΣΙΑ έχω γράψει αυτό το σενάριο κελύφους (δεν έχει τελειώσει και αν), ωστόσο η επίδοση είναι πολύ αργή (διαρκεί ένα λεπτό για να επεξεργαστεί ένα 100 γραμμή του αρχείου). Σας παρακαλώ σημείο μου προς τη σωστή κατεύθυνση για τη βελτίωση των επιδόσεων; Αν και δεν το ακριβές αντικείμενο αυτής της θέσης, εφόσον υπάρχουν δείκτες μπορεί να δοθεί για τον υπολογισμό της διαφοράς μεταξύ της έναρξης και λήξης του χρόνου, θα είναι πολύ χρήσιμη.

Κωδικός:
#!/bin/bash
#script to resptime timings for CO call from logfile
#////////////////////////////////////
#if no command line args
    if [ $# -ne 1 ]
    then
    echo 1>&2"Oops......Usage is wrong. $0 <tgtsrchfile>"
    exit 2
    fi
#assigning command line params to variables
srchFN=$1
#remove resptime.log if already present
checkfile="./resptime.log"
tempfile="./temp.log"
tempfile1="./temp1.log"
    if [ -e $checkfile ];then
    rm -r $checkfile
    fi
    if [ -e $tempfile ];then
        rm -r $tempfile
    fi
    if [ -e $tempfile1 ];then
        rm -r $tempfile1
    fi
    #if keywordfile not present
    if [ ! -r $srchFN ]; then
    echo Target search file $srchFN not present
    exit 2
    fi
#grep for request id
        grep 'Start.*CO' $srchFN | awk -F "RequestId: " '{print $2}'>temp.log
#for each request id get starttime and end time and print into temp file
        cat temp.log | while read line; do
        #if string is empty
        if [ -n $line ];then
        sttime=`grep Start.*CO.*$line $srchFN | awk -F "," '{print $1}'|awk -F " " '{print $2}'`
        endtime=`grep End.*CO.*$line $srchFN | awk -F "," '{print $1}'|awk -F " " '{print $2}'`
            if [ -n "$sttime" -o -n "$endtime" ];then
            echo $line,$sttime,$endtime>>temp1.log
            fi
        fi        
        done;
        
#/////////////////////////////////////

Ευχαριστώ εκ των προτέρων

Τελευταία επεξεργασία από το Jim McNamara? 04-08-2009 σε 10:51 AM.. Αιτιολογία: code tags
Sponsored Links
  #2 (Permalink)  
Old 04-08-2009
quirkasaurus's Avatar
Εγγεγραμμένος χρήστης
 

Εγγραφή: Ιανουάριος 2009
Τοποθεσία: καντονιού, Michigan
Δημοσιεύσεις: 440
πάει καλά με αυτή τη γραμμή, δεν προσδιορίζονται delimiter:


Κωδικός:
grep 'Start.*CO' $srchFN | awk -F "RequestId: " '{print $2}'>temp.log

θα πρέπει να είναι κάτι σαν:


Κωδικός:
grep 'Start.*CO' $srchFN | awk -F, "RequestId: " '{print $2}'>temp.log


μοιάζει με το πρόβλημα είναι δικό σου rereading ολόκληρη $ srchFN για κάθε γραμμή
από temp.log σας δύο φορές μέσα από αυτές τις εντολές grep.

Θα χρειαστεί να διαμορφώσετε τη λογική σας, έτσι ώστε αυτές οι επιπλέον greps ΔΕΝ ακόμη γίνει.

Προσπαθήστε να ξανασκεφτούμε τα πράγματα, ώστε να ξέρετε τι ψάχνετε, ενώ μόνο
ανάγνωση του αρχείου μία φορά.
  #3 (Permalink)  
Old 04-08-2009
Εγγεγραμμένος χρήστης
 

Join Ημερομηνία: Απρίλιος 2009
Θέσεις: 2
Απόσπασμα:
Αρχικά Αποστολέας quirkasaurus View Post
μοιάζει με το πρόβλημα είναι δικό σου rereading ολόκληρη $ srchFN για κάθε γραμμή
από temp.log σας δύο φορές μέσα από αυτές τις εντολές grep.

Προσπαθήστε να ξανασκεφτούμε τα πράγματα, ώστε να ξέρετε τι ψάχνετε, ενώ μόνο
ανάγνωση του αρχείου μία φορά.
Αρχείο εισόδου μου έχει μία γραμμή για την έναρξη της αίτησης και ένα για το τέλος της αίτησης. Και υπάρχουν εκατοντάδες μοναδικά αιτήσεων. Είμαι, λοιπόν, που αγωνίζονται να σκεφτώ πώς αλλιώς μπορώ να πάρω την ώρα έναρξης και λήξης με ένα grep, για κάθε req id ...
  #4 (Permalink)  
Old 04-08-2009
Εγγεγραμμένος χρήστης
 

Εγγραφή: Sep 2006
Δημοσιεύσεις: 2604
greps πάρα πολλά, πάρα πολλά awks, άχρηστοι γάτες ....
  #5 (Permalink)  
Old 04-08-2009
quirkasaurus's Avatar
Εγγεγραμμένος χρήστης
 

Εγγραφή: Ιανουάριος 2009
Τοποθεσία: καντονιού, Michigan
Δημοσιεύσεις: 440
κάτι σαν αυτό; υποκατάστατο «d» για το αρχείο καταγραφής σας:


Κωδικός:
cat d |
while read line ; do

#----------------------------------------------------------------------#
# Start time and service name.                                         #
#----------------------------------------------------------------------#
  if [[ $line = *Service,Start* ]] ; then
    echo $line |
      sed -e 's/^.*SvcName: //' -e 's/ - .*$//' |
      read service_name

    echo $line |
      sed -e 's/,INFO.*$//' |
      read start_time
  fi

#----------------------------------------------------------------------#
# End time.                                                            #
#----------------------------------------------------------------------#
  if [[ $line = *Service,End*SvcName*$svcname*EndUser* ]] ; then
    echo $line |
      sed -e 's/,INFO.*$//' |
      read end_time
  echo start-time $start_time end-time $end_time service-name $service_name
  fi
done

  #6 (Permalink)  
Old 04-08-2009
quirkasaurus's Avatar
Εγγεγραμμένος χρήστης
 

Εγγραφή: Ιανουάριος 2009
Τοποθεσία: καντονιού, Michigan
Δημοσιεύσεις: 440
btw - ότι θα εργάζονται πραγματικά μόνο αν κάθε αίτημα έχει ένα τέλος χρόνο ρεκόρ το αμέσως μετά. αν αυτό δεν συμβαίνει, τότε επιτρέψτε μου να ξέρω.

υπάρχει ένα άλλο τέχνασμα που θα πρέπει να χρησιμοποιήσετε για να preprocess το αρχείο καταγραφής.

Ειδικότερα, δημιουργώντας ένα βασικό χρησιμοποιώντας το svcname και "Υπηρεσία" Έναρξη "" Υπηρεσία, End "
και διαλογή ASC, DESC με βάση αυτό το κλειδί.

Συνέχεια επεξεργασία του αρχείου ξανά χρησιμοποιώντας παραπάνω script μου.
  #7 (Permalink)  
Old 04-08-2009
radoulov's Avatar
--
 

Εγγραφή: Ιανουάριος 2007
Τοποθεσία: Варна, България / Milano, Italia
Δημοσιεύσεις: 3221
Θα ήθελα να χρησιμοποιήσει Perl να υπολογίσει την ημερομηνία και την ώρα διαφορές (χρησιμοποιώντας μια εξωτερική μονάδα Ημερομηνία:: Manip):


Κωδικός:
#!/usr/bin/perl 

use warnings;
use strict;

use Date::Manip;

my $infile = 'file';

open FH, $infile or die "$infile: $!";

my ( $sdate, $edate, $delta, $err, $ustart, $uend, $rtime );

while (<FH>) {
    if (/SvcName: CO/) {
        /Start -/ and ( $sdate = ( split ',' )[0] ) =~ s|:(.*?):|/$1/|;
        /End -/   and ( $edate = ( split ',' )[0] ) =~ s|:(.*?):|/$1/|;
    }
    if ( $sdate && $edate ) {
        $ustart = UnixDate( $sdate, "%s" );
        $uend   = UnixDate( $edate, "%s" );
        if ($edate) {
            $rtime = $ustart - $uend;
            print $sdate, " - ", $edate, "\n";
            print DateCalc( $sdate, $edate, \$err ), "\n";
        }
    }
}

Με δεδομένα το δείγμα σας που παράγει το ακόλουθο αποτέλεσμα:



Κωδικός:
% cat file
2009:04:03 08:21:41:513,INFO ,servername,yyyy,undefined,,INFO,null,.....Out:xxService,Start - SvcName: OIS - EndUserName: - RequestId: null20090403082313
2009:04:03 08:21:41:775,INFO ,servername,yyyy,undefined,,INFO,null,.....Out:xxService,End - SvcName: OIS - EndUserName: - RequestId: null20090403082313 - StatusCode: 0 - StatusText: Success
2009:04:03 08:21:45:660,INFO ,servername,yyyy,undefined,,INFO,null,.....Out:xxService,Start - SvcName: VCC - EndUserName: - RequestId: 411111111111111120090403082318
2009:04:03 08:21:46:171,INFO ,servername,yyyy,undefined,,INFO,null,.....Out:xxService,End - SvcName: VCC - EndUserName: - RequestId: 411111111111111120090403082318 - StatusCode: 0 - StatusText: Success
2009:04:03 08:21:49:583,INFO ,servername,yyyy,undefined,,INFO,null,.....Out:xxService,Start - SvcName: CO - EndUserName: - RequestId: 20090403082321
2009:04:03 08:22:03:571,INFO ,servername,yyyy,undefined,,INFO,null,.....Out:xxService,End - SvcName: CO - EndUserName: - RequestId: 20090403082321 - StatusCode: 0 - StatusText: Success
zsh-4.3.9[t]% ./s       
2009/04/03 08:21:49:583 - 2009/04/03 08:22:03:571
+0:0:0:0:0:0:14

Sponsored Links
Closed Thread

Σελιδοδείκτες

Εργαλεία Θέματος Αναζήτηση αυτό το νήμα
Αναζήτηση αυτό το νήμα:

Advanced Search
Display Modes Βαθμολογήστε αυτό το νήμα
Βαθμολογήστε αυτό το νήμα:

Απόσπαση Κανονισμού
Εσύ δεν μπορεί να υστέρων νέα νήματα
Εσύ δεν μπορεί να μετά απαντήσεις
Εσύ δεν μπορεί να μετά συνημμένα
Εσύ δεν μπορεί να επεξεργαστείτε τις θέσεις

BB κωδικός είναι Σε λειτουργία
Smilies είναι Σε λειτουργία
[IMG] κωδικός Σε λειτουργία
Κώδικα HTML είναι Εκτός χρήσης
Trackbacks είναι Σε λειτουργία
Pingbacks είναι Σε λειτουργία
Refbacks είναι Εκτός χρήσης


Περισσότερα UNIX και Linux Forum Θέματα που μπορεί να σας Χρήσιμη
Νήμα Thread Starter Φόρουμ Απαντήσεις Τελευταίο μήνυμα
FTP τρέχει από shell script δίνει αργή μεταβίβαση ποσοστών Countificus Ο προγραμματισμός και η Shell Scripting 8 04-07-2009 05:50 μμ
Shell script parsing για να συνδεθείτε justbow Ο προγραμματισμός και η Shell Scripting 10 12-06-2008 03:20 μμ
egrep είναι πολύ αργή: Πώς να βελτιώσει τις επιδόσεις hidnana Ο προγραμματισμός και η Shell Scripting 7 02-12-2008 07:13 AM
Βοήθεια! Χαμηλές επιδόσεις Νέο Post εδώ για να επικοινωνήσετε Site Administrators και Moderators 6 08-25-2003 04:08 μμ



Όλες οι ώρες είναι GMT -4. Η ώρα τώρα είναι 09:34 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Γλώσσα Μεταφράσεις Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Η UNIX και Linux Φόρουμ Content Copyright © 1993-2010. Όλα τα δικαιώματα Reserved.Ad διαχείριση από RedTyger

Περιεχόμενο σχετικό με τις διευθύνσεις URL vBSEO 3.2.0