Come si divide una base di file su un token?
-
08-07-2019 - |
Domanda
Supponiamo che tu abbia un file contenente testi (da 1 a N) separati da un $ Come si può tagliare il file in modo che il risultato finale sia N file?
text1 con newline $
text2 $ etc ... $
inserimento di testo liberon
Sto pensando a qualcosa con awk o sed ma c'è qualche app unix disponibile che già svolge quel tipo di attività?
Soluzione
Forse split -p
pattern ?
Hmm. Potrebbe non essere esattamente quello che vuoi. Non divide una linea, avvia un nuovo file solo quando vede il modello. E sembra essere supportato solo su sistemi relativi a BSD.
Puoi usare qualcosa del tipo:
awk 'BEGIN {RS = "<*>quot;} { ... }'
modifica: potresti trovare ispirazione per la parte {...}
qui:
http://www.gnu.org/manual/gawk /html_node/Split-Program.html
modifica: Grazie al commento di dmckee, ma csplit
sembra anche copiare l'intera riga su cui si verifica il modello.
Altri suggerimenti
awk 'BEGIN {RS = " $ " ;; ORS = " "} {textNumber ++; stampa $ 0 > & Quot; testo " textNumber " .out " } 'fileName
Grazie a Bill Karwin per l'idea.
Modifica: aggiungi ORS = " " per evitare di stampare una nuova riga alla fine di ogni file.
Se sto leggendo questo diritto, il comando UNIX cut può essere usato per questo.
cut -d $ -f 1- filename
Potrei avere la sintassi leggermente disattivata, ma questo dovrebbe dire che stai usando $ campi separati e per restituire i campi 1 fino alla fine.
Potrebbe essere necessario uscire da $.
awk -vRS="<*>quot; '{ print <*> > "text"t++".out" }' ORS="" file
usando il comando split possiamo dividere usando le stringhe.
ma il comando csplit ti permetterà di dividere i file basandoti anche su espressioni regolari.