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 11/01/2011, 21h21   #1
Invité de passage
 
Delphine
Inscription : janvier 2011
Messages : 1
Détails du profil
Informations personnelles :
Nom : Delphine

Informations forums :
Inscription : janvier 2011
Messages : 1
Points : 0
Points : 0
Par défaut Tri sur blocs de données avec AWK

Bonjour,

je débute sur ce forum, et sur AWK... Pardonnez moi si cette question a déjà été posée, mais je suis encore un peu perdue sur le forum.

Je dispose d'un fichier de ce type (cf piece jointe). Mon fichier complet présente plus de 1300 blocs de données séparées a chaque fois par 2 lignes blanches.

Je souhaiterais extraire chaque blocs de données dans un fichier qui lui est propre, dont le nom du fichier correspondrait a la 1ere colonne de la 3eme ligne.

Comment faire cela en utilisant awk ??

Par avance merci !

Delphine
Fichiers attachés
Type de fichier : txt well_paths_test.txt (3,3 Ko, 8 affichages)
adelphine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h33   #2
Membre émérite
 
Avatar de Pouic
 
Inscription : octobre 2004
Messages : 668
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2004
Messages : 668
Points : 904
Points : 904
Code :
1
2
3
4
5
6
awk '            
BEGIN { RS = "" ; FS = "\n" }
{
      fd=substr($3, 0, 12);
      print >> fd;
}' data.txt
En supposant qu'il n'y a pas de caractères bizarres, et que tes numéros font exactement 12 chiffres.
__________________
Software becomes slower faster than hardware becomes faster

http://xrenault.developpez.com
API C standard (C ANSI )
Pouic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h48   #3
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 069
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 069
Points : 4 141
Points : 4 141
Citation:
Envoyé par adelphine
[...]le nom du fichier correspondrait a la 1ere colonne de la 3eme ligne
de chaque bloc.

C'est ainsi que je l'ai compris...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/awk  -f
 
function Copie(array, max, fichier){
   for(i=1; i<=max; i++) {print array[i] >> fichier}
}
{
   if(NF > 1){
      text[++n] = $0
      if(n == 3){filename = $1}
   }else{
      getline
      if(NF == 1){ Copie(text, n, filename); n = 0 }
   }
}
END{
   Copie(text, n, filename)
}
N_BaH 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 19h47.


 
 
 
 
Partenaires

Hébergement Web