Question

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

  

text1 avec nouvelles lignes $
  text2 $ etc ... $
  textN

Je pense à quelque chose avec awk ou sed mais existe-t-il une application unix disponible qui effectue déjà ce genre de tâche?

Était-ce utile?

La solution

Peut-être que split -p motif ?

Hmm. Cela peut ne pas être exactement ce que vous voulez. Il ne divise pas une ligne, il ne commence un nouveau fichier que lorsqu'il voit le motif. Et cela ne semble être supporté que par les systèmes liés à BSD.

Vous pouvez utiliser quelque chose comme:

awk 'BEGIN {RS = "<*>quot;} { ... }'

modifier: Vous trouverez peut-être une inspiration pour la partie {...} ici:

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

modifier: Merci aux commentaires de dmckee, mais csplit semble également copier toute la ligne sur laquelle le motif se produit.

Autres conseils

  

awk 'BEGIN {RS = " $ " ;; ORS = "}} {textNumber ++; imprimez 0 $ > " text " textNumber " .out " } 'NomFichier

Merci à Bill Karwin pour cette idée.

Modifier: ajoutez l'ORS = = " pour éviter d’imprimer une nouvelle ligne à la fin de chaque fichier.

Si je comprends bien, la commande UNIX couper peut être utilisé pour cela.

cut -d $ -f 1- filename

La syntaxe est peut-être un peu décalée, mais cela devrait indiquer à Cut que vous utilisez des champs séparés par des dollars et que vous retournez les champs 1 à la fin.

Vous devrez peut-être échapper au $.

awk -vRS="<*>quot; '{ print <*> > "text"t++".out" }' ORS="" file

en utilisant la commande split, nous pouvons séparer en utilisant des chaînes.

mais la commande csplit vous permettra également de couper des fichiers en utilisant des expressions régulières.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top