Nicht imstande, Codes in einer Datei zu vielen Dateien in AWK / Python zu trennen

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

  •  08-07-2019
  •  | 
  •  

Frage

Ich muss verschiedene Codes in einer Datei zu viele Dateien setzen. Die Datei wird apparantly von AWK Erschaffer auf ihrer Homepage geteilt. Die Datei ist auch hier für die einfache Nutzung.

Mein Versuch, das Problem

Ich kann die Linien bekommen, wo jeder Code von

lokalisieren
awk '{ print $1 }'

Allerdings habe ich kein Know-how

  1. die genauen Zeilennummern zu erhalten, damit ich sie verwenden kann
  2. sammeln Codes zwischen den spezifischen Linien, so dass das erste Wort jeder Zeile wird ignoriert
  3. diese separaten Codes in neue Dateien zu setzen, die durch das erste Wort in der Zeile
  4. benannt

Ich bin sicher, dass das Problem auch von AWK und mit Python gelöst werden kann. Vielleicht brauchen wir sie gemeinsam nutzen.

[Bearbeiten] nach der ersten Antwort

Ich erhalte die folgende Fehlermeldung, wenn ich versuche, es auszuführen, mit awk

$awk awkcode.txt 
awk: syntax error at source line 1
 context is
     >>> awkcode <<< .txt
awk: bailing out at source line 1
War es hilfreich?

Lösung

Haben Sie versucht, zu:

  1. Erstellen Sie eine Datei unbundle.awk mit folgendem Inhalt:

1 $ = prev {schließen (i!); prev = $ 1}            {Print substr ($ 0, Index ($ 0, "„) + 1)> $ 1}

  1. Entfernen Sie die folgenden Zeilen die Datei awkcode.txt bilden:

    # entflechten - auspacken ein Bündel in einzelne Dateien

1 $ = prev {schließen (i!); prev = $ 1}            {Print substr ($ 0, Index ($ 0, "„) + 1)> $ 1}

  1. Führen Sie den folgenden Befehl ein:

awk -f unbundle.awk awkcode.txt

Andere Tipps

Sind Sie versuchen, eine Datei in diesem Format zu entpacken? Es ist eine Art von Shell-Archiv. Weitere Informationen finden Sie unter http://en.wikipedia.org/wiki/Shar

Wenn Sie das Programm mit awk ausführen, wird awk all diese Dateien erstellen. Sie brauchen nicht zu schreiben oder umschreiben viel. Sie können einfach, dass awk-Programm ausführen, und es sollte immer noch funktionieren.

Als erstes sehen Sie die Datei in "plain" Format. http://dpaste.com/12282/plain/

Zweitens speichern die Ebene Version der Datei als ‚awkcode.shar‘

Drittens, ich glaube, Sie den folgenden Befehl verwenden müssen.

awk -f awkcode.shar

Wenn Sie es mit einem Python-Programm ersetzen möchten, wäre es so etwas wie dieses.

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()

Awk Datei awkcode.txt sollte keine Leerzeile enthalten. Sollte eine Leerzeile angetroffen wird, schlägt das awk-Programm. Es gibt keine Fehlerprüfung Leerzeile in dem Code heraus zu filtern. Dies konnte ich nach einigen Tagen des Kampfes erfahren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top