The UNIX and Linux Forums  
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.

Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
get Indlæg fra fil inden datointerval ambharish UNIX for dummyer Spørgsmål & svar 2 06-29-2007 05:20 PM
Rapport fil udvinding baseret på Datointerval ganapati Shell Programmering og Scripting 2 07-13-2006 11:26 AM
Logfil dato sammenligne for bruger defineret række mojo24 Shell Programmering og Scripting 0 05-05-2006 06:39 AM
udpakning en række linier fra en fil beilstwh Shell Programmering og Scripting 5 07-09-2004 08:20 AM
Behovet for at udskrive filnavne i et bestemt datointerval ved hjælp ls Shamwari UNIX for dummyer Spørgsmål & svar 2 10-08-2001 07:14 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 07-30-2008
Sharmila_P Sharmila_P is offline
Registreret Bruger
  
 

Join Date: Jul 2008
Stillinger: 19
hente linier fra filen, som falder ind under de givne datointerval


Hej,

Jeg har brug for at hente de strækninger, der falder ind under de givne datointerval.
fx: I en logfil, har jeg de linjer, der vil have den tidsstempel.
input vil være en vis dato range.eg: fra dato: 03/Jan/2008, til dato: 24/Jul/2008.so nu vil jeg gerne hente linjer
der har tidsstemplet mellem disse 2 givent datointerval.

logfil:
-----------
[02/Jan/2008 :19:37:00-20401-59-2] Process - data
[22/Jan/2008 :19:37:00-20401-59-2] Process - data
[22/Mar/2008 :19:37:00-20401-63-2] Process - data
[01/Jul/2008 :19:37:00-20401-63-2] Process - data
[22/Jul/2008 :19:37:00-20401-63-2] Process - data
[25/Jul/2008 :19:37:00-20401-63-2] Process - data

resultat:
Lines 2,3,4 og 5 skulle hentes. de datoer, der er inden for de givne input datointerval.
  #2 (permalink)  
Old 07-30-2008
aigles's Avatar
aigles aigles is offline Forum Advisor  
Registreret Bruger
  
 

Join Date: Apr 2004
Beliggenhed: Bordeaux, Frankrig
Posts: 1.418
En mulig løsning ved hjælp af awk :
Code:
awk -v From="03/Jan/2008" -v To="24/Jul/2008" '
function cnvDate(date   ,d) {
   split(tolower(date), d, "/");
   return sprintf("%04.4d%02.2d%02.2d", d[3], month[d[2]], d[1]);
}
BEGIN {
   FS = "[:[]";
   month["jan"]=1 ; month["feb"]=2 ; month["mar"]=3 ; month["apr"]=4 ;
   month["may"]=5 ; month["jun"]=6 ; month["jul"]=7 ; month["aug"]=8 ;
   month["sep"]=9 ; month["oct"]=10; month["nov"]=11; month["dec"]=12;
   date_from = cnvDate(From);
   date_to   = cnvDate(To);
}
{
   date = cnvDate($2)
   if (date >= date_from && date <= date_to)
      print;
}
' inputfile
Jean-Pierre
  #3 (permalink)  
Old 07-30-2008
Sharmila_P Sharmila_P is offline
Registreret Bruger
  
 

Join Date: Jul 2008
Stillinger: 19
Jeg får den fejl, når jeg køre dette.
awk: syntaksfejl nær linje 1
awk: bailing ud nær linje 1

Da jeg er ny awk, kan du pls forklare, hvad der præcist sin doing.and jeg vil omdirigere resultaterne til en ny fil.
  #4 (permalink)  
Old 07-30-2008
aigles's Avatar
aigles aigles is offline Forum Advisor  
Registreret Bruger
  
 

Join Date: Apr 2004
Beliggenhed: Bordeaux, Frankrig
Posts: 1.418
Prøv med nawk eller gawk i stedet for awk.

Code:
awk -v From="03/Jan/2008" -v To="24/Jul/2008"
Definerer variabler Fra og som indeholder start-og slutdatoer.

Code:
function cnvDate(date   ,d) {
   split(tolower(date), d, "/");
   return sprintf("%04.4d%02.2d%02.2d", d[3], month[d[2]], d[1]);
}
Denne funktion pande en dato, fra 'dd / mmm / yyyy' til 'ÅÅÅÅMMDD'.

Code:
BEGIN {
   FS = "[:[]";
   month["jan"]=1 ; month["feb"]=2 ; month["mar"]=3 ; month["apr"]=4 ;
   month["may"]=5 ; month["jun"]=6 ; month["jul"]=7 ; month["aug"]=8 ;
   month["sep"]=9 ; month["oct"]=10; month["nov"]=11; month["dec"]=12;
   date_from = cnvDate(From);
   date_to   = cnvDate(To);
}
Initalizations:
- Input feltseparator ':' eller '['
- Måneder tabel, der anvendes af cnvDate funktion
- Start-og slutdatoer format ÅÅÅÅMMDD

Code:
{
   date = cnvDate($2)
   if (date >= date_from && date <= date_to)
      print;
}
For hver indgang linje:
- Konverter dato format ÅÅÅÅMMDD
- Print linje, hvis dato mellem start-og slutdatoer


Jean-Pierre.
  #5 (permalink)  
Old 07-31-2008
Sharmila_P Sharmila_P is offline
Registreret Bruger
  
 

Join Date: Jul 2008
Stillinger: 19
For den samme forespørgsel, (nedenfor), hvis inddatafilen er sådan, jeg prøvede at få linjer ved hjælp af feltseparator (FS), som tomme rum.
Jeg brugte den kode som denne ..
BEGIN (
FS \u003d "[]";
Men det er ikke working.How jeg kan angive, at det er til at tage det 7. feltet med den afgrænser enkelt space.or er der nogen anden måde.
Input fil:
-----------
2008-01-02 16:21:35,182 INFO1 loginslogging - mk99263 02/Jan/2008 16:21 2008-01-22 16:21:35,182 INFO2 loginslogging - mk99263 22/Jan/2008 16:21 2008-03-22 16 : 21:35,182 INFO3 loginslogging - mk99263 22/Mar/2008 16:21 2008-07-01 16:21:35,182 INFO4 loginslogging - mk99263 01/Jul/2008 16:21 2008-07-22 16:21:35,182 INFO5 loginslogging - mk99263 22/Jul/2008 16:21
2008-07-25 16:21:35,182 INFO6 loginslogging - mk99263 25/Jul/2008 16:21
  #6 (permalink)  
Old 07-31-2008
aigles's Avatar
aigles aigles is offline Forum Advisor  
Registreret Bruger
  
 

Join Date: Apr 2004
Beliggenhed: Bordeaux, Frankrig
Posts: 1.418
Feltseparator \u003d plads (eller fane)
Dato felt \u003d $ 7
Code:
awk -v From="03/Jan/2008" -v To="24/Jul/2008" '
function cnvDate(date   ,d) {
   split(tolower(date), d, "/");
   return sprintf("%04.4d%02.2d%02.2d", d[3], month[d[2]], d[1]);
}
BEGIN {
   month["jan"]=1 ; month["feb"]=2 ; month["mar"]=3 ; month["apr"]=4 ;
   month["may"]=5 ; month["jun"]=6 ; month["jul"]=7 ; month["aug"]=8 ;
   month["sep"]=9 ; month["oct"]=10; month["nov"]=11; month["dec"]=12;
   date_from = cnvDate(From);
   date_to   = cnvDate(To);
}
{
   date = cnvDate($7)
   if (date >= date_from && date <= date_to)
      print;
}
' inputfile
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 04:04 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0