Impossibile separare i codici di un file in molti file in AWK / Python
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
- per ottenere i numeri di riga esatti in modo da poterli utilizzare
- per raccogliere codici tra le righe specifiche in modo che la prima parola di ogni riga venga ignorata
- 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
Soluzione
Hai provato a:
- Crea un file unbundle.awk con il seguente contenuto:
$ 1! = precedente {chiuso (precedente); prev = $ 1} {stampa substr ($ 0, indice ($ 0, " ") + 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}
- 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.