#1 Le 30/11/2014, à 12: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, à 12: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, à 12: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, à 13:24)
Hors ligne
#4 Le 15/12/2014, à 18: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