Domanda

Devo mettere diversi codici in un file in molti file. Il file è apparentemente condiviso dai creatori di AWK nella loro homepage. Il file è anche qui per un facile utilizzo.

Il mio tentativo di risolvere il problema

Riesco a ottenere le linee in cui ogni codice trova

awk '{ print $1 }'

Tuttavia, non so come

  1. per ottenere i numeri di riga esatti in modo da poterli utilizzare
  2. per raccogliere codici tra le righe specifiche in modo che la prima parola di ogni riga venga ignorata
  3. per inserire questi codici separati in nuovi file che sono nominati dalla prima parola alla riga

Sono sicuro che il problema può essere risolto da AWK e anche con Python. Forse, dobbiamo usarli insieme.

[modifica] dopo la prima risposta

Ricevo il seguente errore quando provo a eseguirlo con awk

$awk awkcode.txt 
awk: syntax error at source line 1
 context is
     >>> awkcode <<< .txt
awk: bailing out at source line 1
È stato utile?

Soluzione

Hai provato a:

  1. Crea un file unbundle.awk con il seguente contenuto:

$ 1! = precedente {chiuso (precedente); prev = $ 1}            {stampa substr ($ 0, indice ($ 0, " ") + 1) > $ 1}

  1. Rimuovi le seguenti righe dal file awkcode.txt:

    # unbundle: decomprime un pacchetto in file separati

$ 1! = precedente {chiuso (precedente); prev = $ 1}            {stampa substr ($ 0, indice ($ 0, " ") + 1) > $ 1}

  1. Esegui il seguente comando:

awk -f unbundle.awk awkcode.txt

Altri suggerimenti

Stai cercando di decomprimere un file in quel formato? È una specie di archivio shell. Per ulteriori informazioni, vedere http://en.wikipedia.org/wiki/Shar

Se esegui quel programma con awk, awk creerà tutti quei file. Non è necessario scrivere o riscrivere molto. Puoi semplicemente eseguire quel programma awk e dovrebbe ancora funzionare.

Innanzitutto, visualizza il file in " plain " formato. http://dpaste.com/12282/plain/

In secondo luogo, salva la versione normale del file come 'awkcode.shar'

Terzo, penso che tu debba usare il seguente comando.

awk -f awkcode.shar

Se vuoi sostituirlo con un programma Python, sarebbe qualcosa del genere.

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

Il file awk awkcode.txt non deve contenere QUALSIASI riga BLANK. Se viene rilevata una riga vuota, il programma awk ha esito negativo. Non è presente alcun controllo errori per filtrare la riga vuota nel codice. Questo ho potuto scoprirlo dopo diversi giorni di lotta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top