![]() |
|
|
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 |
| Vanlig telle basert på et søkeord i Posten | aemunathan | Shell programmering og Skripting | 4 | 03-03-2009 08:39 |
| validere en fil basert på vilkår | trichyselva | Shell programmering og Skripting | 8 | 01-02-2009 08:51 |
| Basert på num av postene i file1 må sjekke postene i file2 å stille noen condns | mavesum | Shell programmering og Skripting | 3 | 11-26-2008 10:48 |
| trekke linjer basert på noen betingelser | prvnrk | Shell programmering og Skripting | 4 | 10-17-2008 06:24 |
| Tell No of Records i filen uten telling Topptekst og Trailer Records | guiguy | Shell programmering og Skripting | 2 | 06-07-2007 01:15 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
bruker awk å telle antall poster basert på vilkår
Hei Jeg har filer med dato og klokkeslett stemplet som mappenavnene som 200906051400,200906051500,200906051600 ..... dermed hverdagen 24 filer blir generert Jeg trenger å gjøre ting på denne 24 filer daglig Filen inneholder data som Code:
200906050016370 0 1244141195225298lessrv3 BSNLSERVICE1 BSNLSERVICE1 2128 LOCATIONMANAGER SLIR 919443200299 MSISDN ASC 919443200299 0 SUCCESS 1244141195225298less 919443200299 124414 79.301938811.6885305NORMAL DELAY_ WGS84 200906050016440 0 1244141197503299lessrv3 BSNLSERVICE1 BSNLSERVICE1 2139 LOCATIONMANAGER SLIR 919449838266 MSISDN ASC 919449838266 0 SUCCESS 1244141197503299less 919449838266 124414 74.739722013.3302837NORMAL DELAY_ WGS84 200906050017070 0 1244141224604306lessrv3 BSNLSERVICE1 BSNLSERVICE1 2128 LOCATIONMANAGER SLIR 919448010097 MSISDN ASC 919448010097 1 SYSTEM FAILURE 1244141224604306less 919448010097 124414 NORMAL DELAY_ WGS84 200906050017110 0 1244141227460308lessrv3 BSNLSERVICE1 BSNLSERVICE1 2128 LOCATIONMANAGER SLIR 919449838266 MSISDN ASC 919448010098 1 SYSTEM FAILURE 1244141227460308less 919449838266 124414 NORMAL DELAY_ WGS84 20090605140148 1204702370366140lessrv3 RTMS 0 TRACKING tlrep 0 SUCCESS 1 WGS84 200906051402100 0 1195202147789210lessrv3 RTMS RTMS LOCATIONMANAGER SLIR 919446001620 MSISDN ASC 919446001620 526 INACTIVE SUBSCRIBER 1195202147789210less 124419 NORMAL DELAY_ WGS84 200906051402100 0 1195202147789210lessrv3 RTMS RTMS LOCATIONMANAGER SLIR 919446001618 MSISDN ASC 919446001618 526 INACTIVE SUBSCRIBER 1195202147789210less 124419 NORMAL DELAY_ WGS84 200906051402100 0 1195202147789210lessrv3 RTMS RTMS LOCATIONMANAGER SLIR 919446001617 MSISDN ASC 919446001617 526 INACTIVE SUBSCRIBER 1195202147789210less 124419 NORMAL DELAY_ WGS84 Jeg trenger skript for å gjøre følgende 1. Det har å filtrere poster basert på $ 4 og $ 6 (dvs. $ 4 \u003d\u003d BSNLSERVICE1 OG $ 6 \u003d\u003d 2128) og teller totalt records for dagen (20090605 *) OUTPUT NØDVENDIG: BSNLSERVICE1 2128 \u003d\u003d 3 2. Det har å filtrere poster basert på $ 4 og $ 6 (dvs. $ 4 \u003d\u003d BSNLSERVICE1 OG $ 6 \u003d\u003d 2128) og teller totalt records for dagen (20090605 *) og gruppe BASERT PÅ $ 14 (dvs. suksess, FEIL) OUTPUT NØDVENDIG: BSNLSERVICE1 2128 SUKSESS \u003d\u003d 1 BSNLSERVICE1 2128 Systemfeil \u003d\u003d 2 3. Det har å filtrere poster basert på $ 4 og $ 6 (dvs. $ 4 \u003d\u003d BSNLSERVICE1 OG $ 6 \u003d\u003d 2128), Gruppe BASERT PÅ $ 9 (dvs. 919448010098, 919446001618) og teller totalt records for dagen (20090605 *) for hver distinkt $ 9 OUTPUT NØDVENDIG: 919449838266 2 919448010097 1 utdataene skal være på $ 4 \u003d\u003d BSNLSERVICE1 og $ 6 \u003d\u003d 2128 bare .. andre ting ($ 4 \u003d\u003d RTMS) er ikke nødvendig. Hjelp meg pls Sist endret av aemunathan; 06-05-2009 på 09:33.. |
|
||||
|
Prøv dette: Code:
awk -v day="20090605" -v serv="BSNLSERVICE1" -v val="2128" '
$1 ~ day && $4==serv && $6==val {
s1++;a[$14]++;b[$9]++
}
END{
print serv,val, "=" s1 "\n"
print serv,val, a["SUCCESS"]
print serv,val, a["SYSTEM"] "\n"
for(i in b){print i, b[i]}
}' file
Hilsen |
|
||||
|
Hi panyam og Franklin Jeg fulgte metoden foreslått av panyam dens gir nyttig resultat. Det går som i rekkefølgen i forespurt. Code:
1.
awk '$4=="BSNLSERVICE1"&&$6=="2128" { count++ } END { print "BSNLSERVICE1-->2128-->" count }' 20090604*
2.
awk '$4=="BSNLSERVICE1"&&$6=="2128"{ b[$14]++} END {for(i in b){print i, b[i]} }' 20090604*
3.
awk '$4=="BSNLSERVICE1"&&$6=="2128"{ b[$9]++} END {for(i in b){print i, b[i]} }' 20090604*
En ting jeg trenger å vite om det er mulig å utlede filename fra dato kommandoen. faktisk jeg trenger for å planlegge den hver kveld klokka 2:00, og jeg trenger å utlede filnavnet fra datoen kommandoen kan ta eksempel kveld 2:00 den ouput av Code:
date +'%Y%m%d' er 20090606 Jeg må gi filnavnet som 20090605 * i filnavnet del av awk ... og Franklin .... Jeg brukte denne måten Code:
#!/usr/xpg4/bin/awk
awk -v day="20090605" -v serv="BSNLSERVICE1" -v val="2128" '
$1 ~ day && $4==serv && $6==val {
s1++;a[$14]++;b[$9]++
}
END{
print serv,val, "=" s1 "\n"
print serv,val, a["SUCCESS"]
print serv,val, a["SYSTEM"] "\n"
for(i in b){print i, b[i]}
}' 200906051859
og fikk svar som Sitat:
|
|
||||
|
Å få datoen for igår kan du bruke datecalc script av Perderabo. Plasser dette skriptet i samme katalog av skript med navnet datecalc og gjøre den kjørbar: dager gått mellom 2 datoer Skriptet bør ser slik ut: Code:
#!/bin/ksh
dat=$(./datecalc -a $(date +"%Y %m %d") - 1)
day=$(/usr/xpg4/bin/awk -v d="$dat" 'BEGIN {split(d,a," ");day=sprintf("%s%02s%02s",a[1],a[2],a[3]);print day}')
/usr/xpg4/bin/awk -v d="$day" -v serv="BSNLSERVICE1" -v val="2128" '
$1 ~ day && $4==serv && $6==val {
s1++;a[$14]++;b[$9]++
}
END{
print "Filename: " FILENAME "\n"
print serv,val, "=" s1 "\n"
print serv,val, a["SUCCESS"]
print serv,val, a["SYSTEM"] "\n"
for(i in b){print i, b[i]}
}' $day*
|
| Bits Tildelt / belastet Franklin52 for dette innlegget | |||
| Dato | Bruker | Kommentar | Beløp |
| 06-06-2009 | aemunathan | Utmerket arbeid gjøres | 50.000 |
|
||||
|
Hei Takk mann ... det hyggelig å se resultatet ... Jeg trenger en mer info. faktisk er bruker sqlloader å sette inn resultatet i en tabell. Her jeg ønsker å skrive den forrige dato så vel i DD-MMM-ÅÅÅÅ format Jeg prøvde på denne måten Code:
#!/bin/ksh
dat=$(./datecalc -a $(date +"%Y %m %d") - 1)
da_te=$(date +'%d')
da=$(($da_te-1))
mon=$(date +'%b')
year=$(date +'%Y')
host=$(hostname)
day=$(/usr/xpg4/bin/awk -v d="$dat" 'BEGIN {split(d,a," ");day=sprintf("%s%02s%02s",a[1],a[2],a[3]);print day}')
/usr/xpg4/bin/awk -v d="$day" -v serv="BSNLSERVICE1" -v val="2128" -v daet="$(($da)-($mon)-($year))" -v ho="$host"'
$1~day && $4==serv && $6==val {
s1++
}
END{
print daet, host,s1
}' $day*
Hjelp meg! Rapporten er av gårsdagen, så jeg må bruke den forrige datoen under utskrift. Takk på forhånd Sist endret av aemunathan; 06-07-2009 på 02:36.. Grunn: en mer kravet !!!!!! |
![]() |
| Hugseliste |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|