![]() |
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici. |
Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
|
||||
| Fil | Thread Starter | Forum | Réponses | Last Post |
| L'enregistrement sur la base d'un mot-clé dans les dossiers | aemunathan | De programmation et de script Shell | 4 | 03-03-2009 08:39 AM |
| la validation d'un fichier basé sur des conditions | trichyselva | De programmation et de script Shell | 8 | 01-02-2009 08:51 AM |
| Sur la base de nombre de dossiers dans file1 besoin de vérifier des dossiers dans file2 de fixer des condns | mavesum | De programmation et de script Shell | 3 | 11-26-2008 10:48 AM |
| extrait les lignes repose sur quelques conditions | prvnrk | De programmation et de script Shell | 4 | 10-17-2008 05:24 AM |
| Comte n ° de documents au dossier, sans compter tête et Trailer Records | guiguy | De programmation et de script Shell | 2 | 06-07-2007 12:15 PM |
![]() |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
|
|
||||
|
utilisant awk compter pas d'enregistrements en fonction de conditions
Salut
J'ai des fichiers avec date et l'heure que le dossier des noms comme 200906051400,200906051500,200906051600 ..... donc tous les jours 24 dossiers seront générés j'ai besoin de faire certaines choses sur ces 24 dossiers tous les jours le fichier contient des données comme 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 i besoin de scripts pour faire ce qui suit 1. Il a pour filtrer les enregistrements en fonction de $ 4 et $ 6 (c'est-à-dire $ 4 \u003d\u003d BSNLSERVICE1 ET $ 6 \u003d\u003d 2128) et de compter l'ensemble des dossiers pour la journée (20090605 *) SORTIE REQUISES: BSNLSERVICE1 2128 \u003d\u003d 3 2. Il a pour filtrer les enregistrements en fonction de $ 4 et $ 6 (c'est-à-dire $ 4 \u003d\u003d BSNLSERVICE1 ET $ 6 \u003d\u003d 2128) et de compter l'ensemble des dossiers pour la journée (20090605 *) ET SUR LA BASE DE GROUPE $ 14 (c'est-à-dire SUCCESS, FAILURE) SORTIE REQUISES: BSNLSERVICE1 2128 SUCCESS \u003d\u003d 1 BSNLSERVICE1 2128 de défaillance du système \u003d\u003d 2 3. Il a pour filtrer les enregistrements en fonction de $ 4 et $ 6 (c'est-à-dire $ 4 \u003d\u003d BSNLSERVICE1 ET $ 6 \u003d\u003d 2128), GROUPE SUR LA BASE $ 9 (c'est-à-dire 919448010098, 919446001618) et de compter l'ensemble des dossiers pour la journée (20090605 *) POUR CHAQUE DISTINCT $ 9 SORTIE REQUISES: 919449838266 2 919448010097 1 la production devrait être de 4 $ \u003d\u003d BSNLSERVICE1 ET $ 6 \u003d\u003d 2128 que d'autres choses .. ($ 4 \u003d\u003d RTMS) ne sont pas nécessaires. Aide-moi svp Dernière édition par aemunathan; au 06.05.2009 08:33 AM.. |
|
||||
|
quelque chose comme cela, vous pouvez essayer:
Code:
awk '$4=="BSNLSERVICE1"&&$6=="2128" { count++ } END { print "BSNLSERVICE1-->2128-->" count }' file_name.txt
|
|
||||
|
Essayez ceci:
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
|
|
||||
|
Salut panyam et de Franklin
j'ai suivi la méthode suggérée par panyam utile de donner son résultat. ici, il va dans l'ordre i demandé. 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*
effectivement j'ai besoin de programmer tous les soirs à 2h00 et j'ai besoin de tirer le nom du fichier à partir de la date de commande permet de prendre l'exemple 2.00 am, ce soir, la sortie de la Code:
date +'%Y%m%d' j'ai besoin de donner le nom du fichier comme 20090605 * dans le nom du fichier de la partie awk ... et pour franklin .... i utilisé de cette façon 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
Citation:
|
|
||||
|
Pour obtenir la date d'hier, vous pouvez utiliser le script de DateCalc Perderabo.
Placez ce script dans le même répertoire que votre script avec le nom DateCalc et de le rendre exécutable: jours se sont écoulés entre 2 dates Votre script doit se présente comme suit: 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 Awarded / Franklin52 d'accusation pour ce post | |||
| Date | Utilisateur | Commentaire | Montant |
| 06-06-2009 | aemunathan | Excellent travail accompli | 50.000 |
|
||||
|
Salut
Merci beaucoup ... l'homme de sa belle pour voir le résultat ... J'ai besoin d'un plus d'infos. utilisant sqlloader suis effectivement d'insérer le résultat dans un tableau. Ici, je veux imprimer la date précédente et en DD-MON-YYYY format j'ai essayé de cette façon 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*
Merci d'avance Dernière édition par aemunathan; au 06.07.2009 01:36 PM.. Motif: une exigence de plus !!!!!! |
![]() |
| Bookmarks |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|