J'ai quelques fichiers très volumineux qui sont essentiellement une concaténation de plusieurs petits fichiers et je dois les diviser en leurs fichiers constitutifs. J'ai aussi besoin de nommer les fichiers de la même manière que les fichiers d'origine.Division d'un fichier concaténé basé sur le texte de l'en-tête
Par exemple, les fichiers QMAX123
et QMAX124
ont été concaténé à:
;QMAX123 - Student
... file content ...
;QMAX124 - Course
... file content ...
je dois recréer le fichier QMAX123
comme
;QMAX123 - Student
... file content ...
Et QMAX124
comme
;QMAX124 - Course
... file content ...
L'original l'en-tête du fichier ;QMAX<some number>
est unique et n'apparaît que comme en-tête dans le fichier.
J'ai utilisé le script ci-dessous pour diviser le contenu des fichiers, mais je n'ai pas été capable de l'adapter pour obtenir les noms de fichiers corrects.
awk '/^;QMAX/{close("file"f);f++}{print $0 > "file"f}' <filename>
Je peux donc soit adapter ce script pour nommer le fichier correctement ou je peux renommer les fichiers créés à l'aide fendus le script ci-dessus en fonction du contenu du fichier, selon le plus facile. Je suis actuellement en train d'utiliser cygwin bash (qui a perl et awk) si cela a une influence sur votre réponse.
semble assez proche, il est stripping l'en-tête de fichier si. Y a-t-il un changement que vous pouvez faire pour les préserver? – StevenWilkins
Ah, je l'ai déjà compris, j'ai ajouté un «print $ F $ 1» à l'air libre. Merci pour l'aide – StevenWilkins
Ok - Je n'étais pas clair si cela faisait partie du fichier, ou un peu de "colle". Je suis content que vous l'aillez compris. L'autre façon serait de se débarrasser du 'else' et de faire l'impression à chaque itération. – justintime