![]() |
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Regler | Links | Albums | FAQ | Members List | Kalender | Søgning | Dagens Stillinger | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Søg denne tråd | Rate Thread | Display Modes |
|
|
|
||||
|
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. |
|
|||||
|
Prøv med nawk eller gawk i stedet for awk.
Code:
awk -v From="03/Jan/2008" -v To="24/Jul/2008" Code:
function cnvDate(date ,d) {
split(tolower(date), d, "/");
return sprintf("%04.4d%02.2d%02.2d", d[3], month[d[2]], d[1]);
}
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);
}
- 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;
}
- Konverter dato format ÅÅÅÅMMDD - Print linje, hvis dato mellem start-og slutdatoer Jean-Pierre. |
|
||||
|
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 |
|
|||||
|
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
|
![]() |
| Bogmærker |
| Thread Tools | Søg denne tråd |
| Display Modes | Bedøm denne tråd |
|
|