![]() |
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| Titelinformation räknas baserat på ett sökord i bokföringen | aemunathan | Shell-programmering och Skript | 4 | 03-03-2009 08:39 |
| validera en fil baserat på villkor | trichyselva | Shell-programmering och Skript | 8 | 01-02-2009 08:51 |
| Baserat på antalet poster i fil1 behöva kontrollera posterna i fil2 att ställa några condns | mavesum | Shell-programmering och Skript | 3 | 11-26-2008 10:48 |
| dellicens linjer bygger på några villkor | prvnrk | Shell-programmering och Skript | 4 | 10-17-2008 06:24 |
| Räkna Antal Poster i fil utan räknar Sidhuvud och Trailer Records | guiguy | Shell-programmering och Skript | 2 | 06-07-2007 01:15 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
använda awk räkna inga poster baserat på villkor
Hej
Jag har filerna med datum och tid stämpel som mappnamnen gillar 200906051400,200906051500,200906051600 ..... därmed vardagliga 24 filer kommer att genereras Jag måste göra vissa saker på den här 24-filer dagligen filen innehåller data, exempelvis Kod:
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 Jag behöver skript göra följande 1. Det måste filtrera poster baserade på $ 4 och $ 6 (dvs $ 4 \u003d\u003d BSNLSERVICE1 och $ 6 \u003d\u003d 2128) och räkna den totala posterna för dagen (20090605 *) OUTPUT KRÄVS: BSNLSERVICE1 2128 \u003d\u003d 3 2. Det måste filtrera poster baserade på $ 4 och $ 6 (dvs $ 4 \u003d\u003d BSNLSERVICE1 och $ 6 \u003d\u003d 2128) och räkna den totala posterna för dagen (20090605 *) och som grund $ 14 (dvs framgång UNDERLÅTELSE) OUTPUT KRÄVS: BSNLSERVICE1 2128 FRAMGÅNG \u003d\u003d 1 BSNLSERVICE1 2128 systemfel \u003d\u003d 2 3. Det måste filtrera poster baserade på $ 4 och $ 6 (dvs $ 4 \u003d\u003d BSNLSERVICE1 och $ 6 \u003d\u003d 2128), som grund $ 9 (dvs 919448010098, 919446001618) och räkna de sammanlagda posterna för dagen (20090605 *) för varje $ 9 OUTPUT KRÄVS: 919449838266 2 919448010097 1 produktionen bör vara av $ 4 \u003d\u003d BSNLSERVICE1 och $ 6 \u003d\u003d 2128 bara .. annat ($ 4 \u003d\u003d RTMS) är inte nödvändigt. Hjälp mig pls Senast redigerad av aemunathan; 06-05-2009 vid 09:33.. |
|
||||
|
Prova detta:
Kod:
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
|
|
||||
|
Hej panyam och Franklin
Jag följde den metod som föreslagits av panyam dess att ge användbara resultat. här det går som i den ordning som jag begärde. Kod:
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*
egentligen behöver jag för att schemalägga det varje kväll vid 2:00 och jag måste dra filnamnet från dagen kommandot kan ta exemplet ikväll 2:00 den ouput av Kod:
date +'%Y%m%d' Jag måste ge filnamn som 20090605 * i filnamnet del av awk ... och Franklin .... jag använde det här sättet Kod:
#!/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
Citat:
|
|
||||
|
För att få den dag då går du kan använda datecalc manus av Perderabo.
Placera skriptet i samma katalog av ditt manus med namnet datecalc och göra den körbar: dagar förflutit mellan 2 datum Ditt skript bör utseende: Kod:
#!/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 Awarded / belasta Franklin52 för det här inlägget | |||
| Datum | Användare | Kommentera | Belopp |
| 06-06-2009 | aemunathan | Mycket arbete | 50.000 |
|
||||
|
Hej
Tack mannen ... det trevligt att se resultatet ... Jag behöver ett mer info. faktiskt är att använda sqlloader sätta in resultatet i en tabell. Här vill jag skriva ut föregående dag och i DD-MÅN-ÅÅÅÅ format Jag försökte på detta sätt Kod:
#!/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*
Tack på förhand Senast redigerad av aemunathan; 06-07-2009 vid 02:36.. Orsak: en mer krav !!!!!! |