The UNIX and Linux Forums  

Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
google unix.com



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
Split fichier et ajoutez-tête et pied de page de chaque fichier ashish4422 De programmation et de script Shell 1 04-15-2008 07:12 AM
Split d'un fichier sans motif - Split, Csplit, Awk madhunk UNIX pour les nuls Questions et réponses 10 12-17-2007 12:57 PM
scinder le nom de fichier rinku De programmation et de script Shell 1 05-28-2007 02:47 AM
Besoin de partager le fichier getdpg De programmation et de script Shell 11 09-04-2006 04:08 AM
Comment découper le fichier de balises dans le fichier? spookyrtd99 De programmation et de script Shell 1 07-31-2006 01:50 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 07-20-2004
pvar pvar is offline
Registered User
  
 

Join Date: Feb 2004
Location: MI, USA
Posts: 12
Split fichier à l'aide de awk

Je suis en train de lire un fichier et de scinder le fichier en plusieurs fichiers. J'ai besoin de créer de nouveaux fichiers avec différents ensembles de lignes du fichier original. c'est-à-dire, le premier fichier de sortie contenant mai 10 lignes et 100 lignes de la deuxième et ainsi de suite. Les critères pour obtenir les lignes entre les deux lignes à partir de certains caractères (variable)

par exemple. Un exemple de fichier d'entrée

DOC100
aaaaaa
bbbbbb
cccccccc
FIN
DOC200
ddddddd
eeeeeee
FIN

J'ai besoin d'envoyer les lignes entre les DOC100 et FIN pour out.1
et des lignes entre DOC200 et FIN pour la prochaine out.2

J'ai pensé que je pourrais le faire en utilisant awk et j'ai essayé la commande suivante, mais cela n'a pas fonctionné.

k \u003d $ filename DOC grep | cut-c4-6
awk-v cn \u003d $ k '/ DOC $ cn /, / END / (print $ 0)' $ filename> $ outfile

Quelqu'un peut-il m'aider sur ce sujet? Merci
  #2 (permalink)  
Old 07-20-2004
zazzybob's Avatar
zazzybob zazzybob is offline Forum Advisor  
Inscrits Geek
  
 

Join Date: Dec 2003
Lieu: Melbourne, Australie
Messages: 2100
Un scénario tel que celui-ci le nom des fichiers out.100, out.200 où le nombre correspond à ce qui suit: "DOC"


Code:
#!/bin/sh

while read line
do
   if echo $line | grep DOC; then
       line_no=`echo $line | sed 's/DOC\([0-9]*\)/\1/g'`
   elif echo $line | grep END; then
       : #ignore
   else
       echo $line >> out.$line_no
   fi
done < file.txt

Lorsque file.txt contient vos données.

Ce script est un moyen rapide et il ya place à amélioration, mais vous avez l'idée.

À la vôtre
ZB
  #3 (permalink)  
Old 07-21-2004
Ygor's Avatar
Ygor Ygor is offline Forum Staff  
Modérateur
  
 

Join Date: Oct 2003
Lieu: -31.96,115.84
Posts: 1411
Utiliser awk ..
Code:
awk '/^DOC/{f=$1} f{print > f} /^END/{close f}' infile

  #4 (permalink)  
Old 07-21-2004
pvar pvar is offline
Registered User
  
 

Join Date: Feb 2004
Location: MI, USA
Posts: 12
Ygor et zazzybob Merci pour votre aide. Mais je vois un problème à chacun de vos scripts.

zazzybob du script - Tout d'abord, j'ai une longueur fixe fichier de données que j'ai besoin de partager. Le script crée des fichiers séparés avec les données, mais il ignore les espaces dans les champs, les moyens qu'il concatène les champs en laissant les espaces en eux.

Ygor script - Votre script crée un seul fichier DOC avec les données entre le dernier DOC / FIN. Mais il met les données, comme ce qu'elle est dans le fichier d'entrée, qui est un bon signe.
  #5 (permalink)  
Old 07-21-2004
zazzybob's Avatar
zazzybob zazzybob is offline Forum Advisor  
Inscrits Geek
  
 

Join Date: Dec 2003
Lieu: Melbourne, Australie
Messages: 2100
Pour résoudre le problème avec le script que j'ai posté, il suffit de mettre les guillemets autour de "$ ligne", thusly

Code:
echo "$line" >> out.$line_no

Cela permettra de préserver les espaces

À la vôtre
ZB
  #6 (permalink)  
Old 07-21-2004
Ygor's Avatar
Ygor Ygor is offline Forum Staff  
Modérateur
  
 

Join Date: Oct 2003
Lieu: -31.96,115.84
Posts: 1411
Je n'ai pas lu le peu de noms de fichiers tels que "doc.1" avant. Essayez ce lieu ...
Code:
awk '/^DOC/{f="doc."++d} f{print > f} /^END/{close f; f=""}' infile

$ Head -1000000 doc .*
\u003d\u003d> Doc.1 <\u003d\u003d
DOC100
aaaaaa
bbbbbb
cccccccc
FIN

\u003d\u003d> Doc.2 <\u003d\u003d
DOC200
ddddddd
eeeeeee
FIN
  #7 (permalink)  
Old 07-21-2004
pvar pvar is offline
Registered User
  
 

Join Date: Feb 2004
Location: MI, USA
Posts: 12
zazzybob le script fonctionne bien maintenant.

Ygor script ont encore un problème. Il crée des fichiers de sortie séparés, mais maintenant il met des lignes à partir de DOC & FIN aussi dans les fichiers de sortie. J'ai juste besoin de données entre les lignes.

Agin Merci pour l'aide.
Closed Thread

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 01:04 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0