Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications
Applications Questions sur l'utilisation d'applications, du shell, et des interfaces graphiques (KDE, Gnome, XFCE... )
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/06/2007, 21h00   #1
Invité de passage
 
Inscription : février 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 18
Points : 1
Points : 1
Par défaut AWK : traitement de fichier

Bonjour,

Je travaille sous Unix SunOS 5.8, j'ai un fichier de plusieurs lignes (ci-dessous un extrait), je veux comparer le champ rouge de la ligne 1 avec le champ rouge de la ligne 2, et de même pour la ligne 2 avec la ligne 3, ainsi de suite ...

Centenu du fichier :

Ligne 1 : RED_120607X082.RXCDZH6.g759;12-Jun-05 à 04:43;681389;12/06/2007;01:36;12/06/2007;03:39;3083
Ligne 2 : RED_120607V083.RXCDZH6.g759;12-Jun-05 à 04:44;1151;11/06/2007;23:16;11/06/2007;20:36;5
....
....

Merci
zeus2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 22h14   #2
Expert Confirmé
 
Avatar de Katyucha
 
Inscription : mars 2004
Messages : 3 109
Détails du profil
Informations personnelles :
Âge : 31
Localisation : Allemagne

Informations forums :
Inscription : mars 2004
Messages : 3 109
Points : 3 313
Points : 3 313
Quelles comparaisons ? égalité ou supérieure/inférieure ?
__________________
Ancien Rédacteur Linux && Unix / Nouveau retraité de DVP
The UNIX way of sex:
gunzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

Je ne réponds ni aux messages privées, ni aux messages plein de fautes...
Katyucha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 10h45   #3
Invité de passage
 
Inscription : février 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 18
Points : 1
Points : 1
Ligne 1 : RED_120607X082.RXCDZH6.g759;12-Jun-05 à 04:43;681389;12/06/2007;01:36;12/06/2007;03:39;3083

Ligne 2 : RED_120607X083.RXCDZH6.g759;12-Jun-05 à 04:44;1151;11/06/2007;23:16;11/06/2007;20:36;5

Je voudrai en fait afficher pour chaque deux lignes successives, si le [champ2-champ1]>=2heures

Car les champs en rouge sont des heures : 03h39 et 23h16.

Merci.
zeus2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 15h15   #4
Expert Confirmé
 
Avatar de Katyucha
 
Inscription : mars 2004
Messages : 3 109
Détails du profil
Informations personnelles :
Âge : 31
Localisation : Allemagne

Informations forums :
Inscription : mars 2004
Messages : 3 109
Points : 3 313
Points : 3 313
Travaillé sur les heures en awk ...arg
Je te conseillerai plutot de t'orienter vers le langage Perl, developpé pour éviter d'avoir des usines à gaz sous awk
__________________
Ancien Rédacteur Linux && Unix / Nouveau retraité de DVP
The UNIX way of sex:
gunzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

Je ne réponds ni aux messages privées, ni aux messages plein de fautes...
Katyucha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 18h21   #5
Invité de passage
 
Inscription : février 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 18
Points : 1
Points : 1
Par défaut Traitement des champs heures

et perl sous unix, je sais pas encore par quoi commencer.
Je dois donner le nom du fichier en entrée du script perl, comparer les champs des lignes, et afficher le résultat...

Je verrai.
zeus2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 22h56   #6
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 968
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 968
Points : 1 375
Points : 1 375
Je ne suis pas sûr d'avoir compris, mais voilà quelque chose en awk qui le fait peut-être:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
nawk -F';' '
# hh:mm -> mn
function m(hm)
{
  split(hm,s,":");
  return((s[1]*60)+s[2]);
}
function process(old,new)
{
  oldm=m(old);
  newm=m(new);
  if(newm<oldm) newm+=(24*60);
  if((newm-oldm)>120)
  {
    printf("\n%s\n%s\n",r0,r1);
  }
}
BEGIN {
  old=-1;
}
{
  new=$5
  r1=$0
  if(old!=-1)
  {
    process(old,new);
  }
  r0=$0
  old=new;
}
'
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2007, 11h40   #7
Invité de passage
 
Inscription : février 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 18
Points : 1
Points : 1
Bonjour,

Merci pour la réponse.

Comment puis-je utiliser les deux fonctions, pour détecter si la différence entre le champ1 (champ rouge ligne1) et le champ2 (champ rouge ligne2) est >=2h.

J'ai un fichier qui contient :

(ligne 1) RED_120607X082.RXCDZH6.g759;12-Jun-05 à 04:43;681389;12/06/2007;01:36;12/06/2007;03:39;3083

(ligne 2) RED_120607X083.RXCDZH6.g759;12-Jun-05 à 04:44;1151;11/06/2007;23:16;11/06/2007;20:36;5

....
....

Je veux afficher pour chaque deux lignes successives, si le [champ2-champ1]>=2heures

Càd : si (23:16 - 03:39)>=2h, ainsi de suite pour la ligne2 et la ligne3.

Merci.
zeus2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2007, 12h27   #8
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
[QUOTE=zeus2005]
Càd : si (23:16 - 03:39)>=2h, ainsi de suite pour la ligne2 et la ligne3.
QUOTE]


Pour fonctionner, cela doit intégrer aussi le changement de jour.
Même si ce n'est pas la solution, en cherchant un petit peu tu as de quoi terminer ton exercice

http://lea-linux.org/cached/index/Dev-awk.html

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
awk -F";" '
{
	if (NR == 1) {
		StartTimeMinutes=(60*substr($7,1,2))+substr($7,4,2)
		StartTime=$7
		StartDay=substr($6,1,2)
		next
	}
 
	EndTimeMinutes=(60*substr($5,1,2))+substr($5,4,2)
	EndTime=$5
	EndDay=substr($4,1,2)
 
	Delta=(((StartDay - EndDay)*24*60) + StartTimeMinutes) - EndTimeMinutes
	if (Delta > 120) {
		print "StartTime : le "StartDay" à "StartTime" / EndTime : le ("EndDay") à "EndTime
	}
	StartTimeMinutes=(60*substr($7,1,2))+substr($7,4,2)
	StartTime=$7
	StartDay=substr($6,1,2)
} '  test.txt
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2007, 22h24   #9
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 968
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 968
Points : 1 375
Points : 1 375
Citation:
Envoyé par zeus2005
Bonjour,

Merci pour la réponse.

Comment puis-je utiliser les deux fonctions, pour détecter si la différence entre le champ1 (champ rouge ligne1) et le champ2 (champ rouge ligne2) est >=2h.
Ma réponse est un script awk complet qui utilise ces fonctions et répond à (ce que je comprend de) ton problème.

Essaie le en lui passant le nom de ton fichier en argument (comme le fait celui de BlaireauOne) ou en redirigeant ton fichier vers le script.
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h59.


 
 
 
 
Partenaires

Hébergement Web