Impossible de séparer les codes d'un fichier en plusieurs fichiers dans AWK / Python

StackOverflow https://stackoverflow.com/questions/632958

  •  08-07-2019
  •  | 
  •  

Question

Je dois mettre différents codes dans un fichier pour plusieurs fichiers. Le fichier est apparemment partagé par les créateurs d’AWK sur leur page d’accueil. Ce fichier est également ici pour une utilisation facile.

Ma tentative de résolution du problème

Je peux obtenir les lignes où chaque code est localisé par

awk '{ print $1 }'

Cependant, je ne sais pas comment

  1. pour obtenir les numéros de ligne exacts afin que je puisse les utiliser
  2. pour collecter les codes entre les lignes spécifiques afin que le premier mot de chaque ligne soit ignoré
  3. pour mettre ces codes séparés dans de nouveaux fichiers nommés par le premier mot de la ligne

Je suis sûr que le problème peut être résolu aussi bien par AWK que par Python. Peut-être devons-nous les utiliser ensemble.

[modifier] après la première réponse

J'obtiens l'erreur suivante lorsque j'essaie de l'exécuter avec awk

$awk awkcode.txt 
awk: syntax error at source line 1
 context is
     >>> awkcode <<< .txt
awk: bailing out at source line 1
Était-ce utile?

La solution

Avez-vous essayé de:

  1. Créez un fichier unbundle.awk avec le contenu suivant:

$ 1! = prev {close (prev); prev = $ 1}            {print substr (0 $, index (0 $, "")" + 1) > 1 $}

  1. Supprimez les lignes suivantes du fichier awkcode.txt:

    # dissocier - décompressez un paquet en fichiers séparés

$ 1! = prev {close (prev); prev = $ 1}            {print substr (0 $, index (0 $, "")" + 1) > 1 $}

  1. Exécutez la commande suivante:

awk -f unbundle.awk awkcode.txt

Autres conseils

Essayez-vous de décompresser un fichier dans ce format? C'est une sorte d'archive shell. Pour plus d'informations, voir http://fr.wikipedia.org/wiki/Shar

Si vous exécutez ce programme avec awk, awk créera tous ces fichiers. Vous n'avez pas besoin d'écrire ou de réécrire beaucoup. Vous pouvez simplement exécuter ce programme awk, et il devrait toujours fonctionner.

Tout d’abord, affichez le fichier en " plain " format. http://dpaste.com/12282/plain/

Deuxièmement, enregistrez la version brute du fichier sous le nom "awkcode.shar"

Troisièmement, je pense que vous devez utiliser la commande suivante.

awk -f awkcode.shar

Si vous souhaitez le remplacer par un programme Python, ce serait quelque chose comme ceci.

import urllib2, sys

data= urllib2.urlopen( "http://dpaste.com/12282/plain/" )
currName, currFile = None, sys.stdout
for line in data:
    fileName, _, text= line.strip().partition(' ')
    if fileName == currName:
        currFile.write(line+"\n")
    else:
        if currFile is not None:
            currFile.close()
        currName= fileName
        currFile= open( currName, "w" )
if currFile is not None:
    currFile.close()

Le fichier awk awkcode.txt ne doit contenir AUCUNE ligne BLANK. Si une ligne vide est rencontrée, le programme awk échoue. Il n'y a pas de vérification d'erreur pour filtrer les lignes vierges dans le code. Je pouvais le découvrir après plusieurs jours de lutte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top