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.