Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/11/2014, à 13:12

SingingLarvae

Bash : découper un fichier texte avec de multiples délimiteurs

Bonjour,

Je suis confronté au problème suivant sous Bash.

Dans le cadre d'un stage, on me demande de reprendre des rapports PDF (une petite centaine avec une dizaine de pages à chaque fois) et de les préparer pour une importation dans une base de données. Le soucis, c'est qu'ils ne sont pas tous « exactement » construit pareil et contiennent pas tous les même données.

J'ai pour le moment réussi à convertir les PDFs en fichiers textes (via pdftotext) ; je souhaite maintenant découper ces fichiers textes en sous-fichiers suivants 3 différents délimiteurs, un peu du style :
Fichier-original-1.txt

Rubrique
A
B
(…)
Intitulé
C
D
(...)
Chapitre
E
F
(…)

Une fois découpé, je dois obtenir :
Rubrique-fichier1.txt

A
B
(…)

Intitulé-fichier1.txt

C
D
(…)

Chapitre-fichier1.txt

E
F
(…)

A noter que les délimiteurs (« Rubrique », « Intitulé », « Chapitre ») comporte bien éveidement des espaces dans le cas que je cherche à traiter.

J'ai réussi partiellement avec csplit, mais il ne prend en compte qu'un seul délimiteur (par exemple « Chapitre »)

#!/bin/bash
for TEXT in $FOLDER/*.txt
do
	echo "Processing file $TEXT"
	csplit -ksz $TEXT "/Chapitre/"
done

Je pense qu'il est possible de passer par sed ou awk, mais je n'ai pas trop d'idée quand à la meilleure solution ; toute aide serait la bienvenue !

Merci d'avance

Hors ligne

#2 Le 30/11/2014, à 13:40

pingouinux

Re : Bash : découper un fichier texte avec de multiples délimiteurs

Bonjour,
Voici une méthode, mais le nom des fichiers créés n'est pas exactement celui que tu veux.

awk '{if($1~/Rubrique|Intitulé|Chapitre/) {fic=$1} else print $0 >fic"-"FILENAME}' Fichier-original-1.txt

Hors ligne

#3 Le 30/11/2014, à 13:54

credenhill

Re : Bash : découper un fichier texte avec de multiples délimiteurs

hello

awk '/^Rubrique|^Intitulé|^Chapitre/ {f=$1; next} {print > f "-fichier1.txt"}' fichier

Dernière modification par credenhill (Le 30/11/2014, à 14:24)

Hors ligne

#4 Le 15/12/2014, à 19:03

SingingLarvae

Re : Bash : découper un fichier texte avec de multiples délimiteurs

Bonsoir,

Et avec retard, merci pour les solutions !

J'avoue les avoir utilisé seulement partiellement car, comme les délimiteurs contenaient des espaces (parfois conséquent) ou des caractères cachés Windows, je me retrouvais avec des nom de fichiers textes plutôt "bizarres". Néanmoins, en adaptant un peu le code pour mon usage bien spécifique, je suis arrivé à mes fins !

Encore merci et désolé pour le retard !

Hors ligne