Comment diviser une base de fichiers sur un jeton?

Disons que vous avez un fichier contenant des textes (de 1 à N) séparés par un $ Comment peut-on fendre le fichier pour que le résultat final soit N fichiers?

text1 avec newlines $
text2 $ etc … $
textN

Je pense à awk or sed, mais existe-t-il une application Unix disponible qui exécute déjà ce type de tâche?

Peut-être un pattern split -p ?

Hmm. Ce n’est peut-être pas exactement ce que vous voulez. Il ne divise pas une ligne, il ne démarre qu’un nouveau fichier quand il voit le motif. Et il semble être pris en charge uniquement sur les systèmes liés à BSD.

Vous pourriez utiliser quelque chose comme:

 awk 'BEGIN {RS = "$"} { ... }' 

edit: Vous pourriez trouver de l’inspiration pour la partie { ... } ici:

http://www.gnu.org/manual/gawk/html_node/Split-Program.html

edit: Merci à dmckee de commenter, mais csplit semble aussi copier toute la ligne sur laquelle le motif se produit.

awk ‘BEGIN {RS = “$”; ORS = “”} {textNumber ++; print $ 0> “text” textNumber “.out”} ‘nomfichier

Merci à Bill Karwin pour l’idée.

Edit: Ajoutez l’ORS = “” pour éviter d’imprimer une nouvelle ligne à la fin de chaque fichier.

Si je lis bien, la commande UNIX cut peut être utilisée pour cela.

 cut -d $ -f 1- filename 

J’aurais peut-être une syntaxe légèrement différente, mais cela devrait indiquer que vous utilisez des champs séparés et que vous retournez les champs 1 à la fin.

Vous devrez peut-être échapper au $.

 awk -vRS="$" '{ print $0 > "text"t++".out" }' ORS="" file 

En utilisant la commande split, nous pouvons diviser en utilisant des chaînes.

mais la commande csplit vous permettra également de fendre des fichiers en vous basant sur des expressions régulières.