Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
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 30/04/2004, 11h54   #1
Membre du Club
 
Inscription : avril 2004
Messages : 63
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2004
Messages : 63
Points : 40
Points : 40
Envoyer un message via MSN à iamspacy
Par défaut Awk

bonjour,
donc voila ,j'aimerai obtenir des lignes specifiques d'un fichier avec awk,avec une boucle for:

Code :
1
2
3
4
5
 
for i in `cat fichier`
do
echo `awk  '{print $i}' $fic` >>$2
done
sachant que fichier contient:
3 5

et fic:
5

21 12 2003 2 10

22 12 2003 1 11

31 12 2003 -3 0

1 1 2004 -7 -1

2 1 2004 -10 -5


mais il m'affiche 2 fois le fichier fic au lieu de la 3eme et la 5eme ligne verticale.
comment je peux resoudre cela.
merci[/code]
iamspacy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2004, 12h01   #2
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
Que dois tu faire exactement ?
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2004, 12h06   #3
Membre du Club
 
Inscription : avril 2004
Messages : 63
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2004
Messages : 63
Points : 40
Points : 40
Envoyer un message via MSN à iamspacy
je veux obtenir la 3eme ligne et la 5 eme ligne verticale:

2003
2003
2003
2004
2004

10
11
0
-1
-5

sachant qu'on a 3 5,en faisant `cat fichier`
iamspacy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2004, 12h22   #4
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
fait un man awk, la passation de parametre a awk ne se fait pas comme tu le pense ($i)
:
awk -v "vaar=$i" '............' dans ton cas
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2004, 12h37   #5
Membre du Club
 
Inscription : avril 2004
Messages : 63
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2004
Messages : 63
Points : 40
Points : 40
Envoyer un message via MSN à iamspacy
ta raison
j'ai fait

Code :
1
2
3
4
5
 
for i in `cat fichier`
do
echo `awk -v "var=$i" '{print $var}' $fic` >>$2
done
et ca marche
thanks
iamspacy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 13h25   #6
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

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 ...

Contenu 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
....
....

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 25/06/2007, 15h52   #7
Membre actif
 
Étudiant
Inscription : novembre 2006
Messages : 287
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2006
Messages : 287
Points : 169
Points : 169
cela pourrait peut-être t'aider à trouver une solution ...
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
32
33
34
35
36
37
 
#!/bin/sh
 
i=0;
 
while read line
do
        if [ "$line" == "" ]
        then
                echo -e "ligne vide"
        else
                heure=$(echo $line |cut -d ';' -f5)
                i=$(expr $i + 1);
        fi
 
 
        if [ $i -ge 2 ]
        then
                h1=$(echo $heure |cut -d ':' -f1);
                h2=$(echo $prev |cut -d ':' -f1);
 
                m1=$(echo $heure |cut -d ':' -f2);
                m2=$(echo $prev |cut -d ':' -f2);
 
                diffHeure=$(expr $h1 - $h2);
                diffMin=$(expr $m1 - $m2);
                [ $diffHeure -lt 0 ] && diffHeure=$(expr $diffHeure + 24)
 
                [ $diffMin -lt 0 ] && diffMin=$(expr $diffMin + 60) && diffHeure=$(expr $diffHeure - 1)
 
                [ $diffHeure -gt 2 ] && echo -e "$h1:$m1 et $h2:$m2 ont un ecart de + de 2h"
 
        fi
 
        prev=$heure;
 
done <fic
bit_o est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2007, 16h18   #8
Invité de passage
 
Inscription : août 2007
Messages : 1
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 1
Points : 1
Points : 1
Par défaut lignes successives

Bonjour,

Je cherche à récupérer les paires des lignes numérotées qui contiennent une expression régulière s'étalant sur les deux lignes.

par exemple comment extraire les deux lignes en rouge du fichier suivant ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
060660        END-EXEC.                                                 KPERL0
060670        GO TO F80-OK.                                             KPERL0
060680 F80-KB2S-W.                                                      KPERL0
060690       MOVE      "W "           TO  V-INFO-TYPE.                  KPERL0
060700       MOVE  "KPER.PIECEJUSTIFICATIVE    " TO V-INFO-CODE.        KPERL0
060710       EXEC SQL                                                   KPERL0
060720       INSERT                                                     KPERL0
060730                      INTO  KPER.PIECEJUSTIFICATIVE               KPERL0
060740                  ( NOPCE ,                                       KPERL0
060750                    NOORPER ,                                     KPERL0
060760                    CODNATPJ ,                                    KPERL0
060770                    DATDEBEFFPJ ,                                 KPERL0
060780                    DATFINEFFPJ ,                                 KPERL0
Cordialement,
un débutant
n°96047 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h34.


 
 
 
 
Partenaires

Hébergement Web