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à?

È stato utile?

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.

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