![]() |
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Rules | Lenker | Album | FAQ | Medlemsliste | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her. |
Mer UNIX og Linux Forum Emner Du kan finne nyttig
|
||||
| Tråd | Tråd startet | Forum | Svar | Siste innlegg |
| komme fra fil innen datoperioden | ambharish | UNIX for Dummies Spørsmål og svar | 2 | 06-29-2007 06:20 |
| Rapportfilen utvinning basert på Datoperiode | ganapati | Shell programmering og Skripting | 2 | 07-13-2006 12:26 |
| Loggfilbane dato sammenligne for brukerdefinerte utvalg | mojo24 | Shell programmering og Skripting | 0 | 05-05-2006 07:39 |
| hvordan du pakker ut en rekke linjer fra en fil | beilstwh | Shell programmering og Skripting | 5 | 07-09-2004 09:20 |
| Må skrive ut filnavn i en bestemt datoperiode bruker ls | Shamwari | UNIX for Dummies Spørsmål og svar | 2 | 10-08-2001 08:14 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
hente linjer fra filen som faller inn under gitt datoperiode
Hei, Jeg trenger å hente linjer som faller inn under gitt datoperiode. eksempel: I en loggfil, jeg har den linjer som vil ha tidsstempel. inntaket vil være noen dato range.eg: fra dato: 03/Jan/2008, til dato: 24/Jul/2008.so nå jeg ønsker å hente linjer som har tidsstempelet mellom disse 2 gitt datoperiode. loggfilen: ----------- [02/Jan/2008 :19:37:00-20401-59-2] Prosess - 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] Prosess - data Resultatet: Linjer 2,3,4 og 5 må hentes. datoene er innenfor de gitte input datoperiode. |
|
|||||
|
Forsøk med nawk eller gawk istedenfor awk. Code:
awk -v From="03/Jan/2008" -v To="24/Jul/2008" Definerer variabler fra og til som inneholder start-og sluttdato. 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 funksjonen coverts en dato fra 'dd / mmm / åååå "til" YYYYMMDD ". 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 feltet separator ':' eller '[' - Måneder tabellen brukes av cnvDate funksjon - Start-og sluttdato format ÅÅÅÅMMDD Code:
{
date = cnvDate($2)
if (date >= date_from && date <= date_to)
print;
}
For hver inngangsstrøm: - Konverter dato til formatet ÅÅÅÅMMDD - Print linje hvis dato mellom start-og sluttdato Jean-Pierre. |
|
||||
|
For den samme spørringen, hvis inndatafilen er slik (under), jeg prøvde å få linjene ved hjelp av feltet separator (FS) som fjerne mellomrom.
Jeg brukte koden som dette .. BEGIN ( FS \u003d "[]"; Men det er ikke working.How jeg kan angi at det må ta den 7. feltet med skilletegnet enkelt space.or er det noen annen måte. Inndatafilen: ----------- 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 |
|
|||||
|
Felt separator \u003d space (eller fane) Datofelt \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
|
![]() |
| Hugseliste |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|