#1 Le 04/08/2019, à 20:10
- L'Africain
Améliorer script de fusion de deux fichiers
Bonjour,
Il y a quelques années on m'a aidé pour écrire un script qui permet la fusion deux fichiers, un de notes (avec l'extension TXT), l'autre le texte dans lequel mettre les notes (avec l'extension usfm).
Voici le script en question:
#!/bin/bash
#Ce script permet de fusionner des notes numérotées avec le chapitre et le verset séparé par une virgule. Fichier notes **.TXT, fichier texte *.usfm
for item in {0..80}
do printf -v id "%02d" "$item"; echo "${id}.usfm, ${id}.TXT"
awk -i inplace -v INPLACE_SUFFIX=.old '
$1 ~ /^[0-9]+\,[0-9]+/{
tmp=$1
$1=""
refs[tmp]=$0
$1=tmp
}
$1=="\\c" {rf=$2}
$1=="\\v" && /\*/ {
sub(/\*/,"\\f + \\fr "rf","$2" \\ft "refs[rf","$2]"\\f*",$0)
}
{print}' "${id}.TXT" "${id}.usfm"
done
J'ai deux petits problèmes, le premier c'est que le script ne tiens pas compte des retours à la ligne éventuel dans les notes (toujours numérotées par le chap et le verset ex: 4, 11) et le second c'est que quelque fois la note est dans le titre qui précède le verset, par exemple:
\s mon titre*
\p
\v 3 Mon texte
La note du verset 3 devrait venir alors au niveau de l'* du titre.
Enfin s'il était possible de couper la note du fichier source TXT pour y voir plus clair si éventuellement il fallait finir le travail manuellement ça serait formidable.
Merci d'avance
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#2 Le 07/08/2019, à 14:00
- LeoMajor
Re : Améliorer script de fusion de deux fichiers
bonjour
On ne connaît plus la situation de départ et d'arrivée. Personnellement, je ne m'en rappelle plus.
Si tu veux que ce soit portable, il te faut modéliser la structure de tes données en variables ( collection, dico, liste de listes d'éléments, variable objet, tables sql avec clef étrangère, json, ... ; choisis la formule qui te convient). Ton approche est trop visuelle, trop axée sur l'affichage, alors qu'en général, c'est le dernier des soucis. En clair, il n'y a pas assez d'abstraction. Donc pas portable. ou alors tu demandes la formulation du patch/diff/merge au développeur qui a écrit les sources de tes données ?!
Hors ligne
#3 Le 07/08/2019, à 14:22
- xubu1957
Re : Améliorer script de fusion de deux fichiers
Bonjour,
C'était cette discussion > Fusionner fichier de note dans autre fichier texte (Résolu) ?
Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Réso|u] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci. Membre de Linux-Azur
Hors ligne
#4 Le 07/08/2019, à 14:42
- L'Africain
Re : Améliorer script de fusion de deux fichiers
@Xubu, oui c'est bien cette discussion.
@LeoMajor, le lien vers l'ancienne discussion est-il suffisant?
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#5 Le 07/08/2019, à 20:10
- LeoMajor
Re : Améliorer script de fusion de deux fichiers
oui j'ai vu.
cat 00_fichier.txt
\c 1
\s Nzambe, Mozalisi walikolo * nanse
\p
\v 1 O libandela Nzambe akeli likolo na nse.
\v 2 Nse ezalaka se mpamba, eloko yoko ezalaka wana te. Molili mozalaka bipai binso mpe mpema ya Nzambe ezalaka koleka likolo lya mai lokola mompepe.
\v 3 Nzambe alobi: «Mwinda mozala», mpe mwinda mobimi.
\v 4 Nzambe amoni ’te mwinda mozalaki malamu mpe akaboli mwinda na molili.
\v 5 Nzambe apesi mwinda nkombo moi, apesi molili nkombo butu. Mpokwa eyindi, ntongo etani: ezalaki mokolo mwa yambo *.
\v 6 Nzambe alobi: «Etando ezala, ekabola mai mazali o likolo na mai mazali o nse»; esalemi se bongo.
\v 7 Nzambe akeli etando * ekaboli mai mazali o nse ya etando na mai mazali likolo;
cat 00_fichier_notes.txt
1,5 Moto akomi buku eye alingi kopesa ndimbola ya ebandela ya molóngó mobimba lokola bato ba mayele ba sikawa te. Buku eye ekomami na ntina ena te. Alingi bobele koyebisa ’te Nzambe akeli manso tokoki komono. Yango wana akaboli mango lokola azalaki komono mango o likolo, o mbu, o mokili, epai na epai. Alakisi bongo Nzambe lokola moto asali mikolo motoba, o mokolo moko moko mosala mosusu, mpo apema o mokolo mwa nsambo (Sabato), engebene na mobeko Nzambe apesaki ba-Israel. Kasi toyebi na bosolo ’te Nzambe akeli binso lokola mosali te, kasi se na ndinga ya ye: ekoki na Ye ’te akanisa byango mpo bizala.
1,7 Ba-Israel, na bato banso ba eleko ena, bakanisaki ’te likolo lya mokili ezipeli enene ezalaki eye ekaboli nse eye na mai manene mazalaki o likolo.
1,S kinshasa muanda matuidi
quelque fois la note est dans le titre qui précède le verset
tu dois le formuler explicitement, sinon, tu ne peux pas appliquer de règle d'écriture
ex
1,S kinshasa muanda matuidi
à essayer
awk '$1~/^[0-9]+\,[S0-9]+$/ { tmp=$1; $1=""; refs[tmp]=$0; $1=tmp }; $1=="\\c" {rf=$2}; $0~/^\\s.*[*]/ {sub(/*/,"\\f + \\fr "rf",S \\ft "refs[rf",S"]" \\f*",$0)}; $0~/^\\v.*[*]/ {sub(/*/,"\\f + \\fr "rf","$2" \\ft "refs[rf","$2]" \\f*",$0)}; NR!=FNR{print}' /tmp/00_fichier_notes.txt /tmp/00_fichier.txt
renvoie
\c 1
\s Nzambe, Mozalisi walikolo \f + \fr 1,S \ft kinshasa muanda matuidi \f* nanse
\p
\v 1 O libandela Nzambe akeli likolo na nse.
\v 2 Nse ezalaka se mpamba, eloko yoko ezalaka wana te. Molili mozalaka bipai binso mpe mpema ya Nzambe ezalaka koleka likolo lya mai lokola mompepe.
\v 3 Nzambe alobi: «Mwinda mozala», mpe mwinda mobimi.
\v 4 Nzambe amoni ’te mwinda mozalaki malamu mpe akaboli mwinda na molili.
\v 5 Nzambe apesi mwinda nkombo moi, apesi molili nkombo butu. Mpokwa eyindi, ntongo etani: ezalaki mokolo mwa yambo \f + \fr 1,5 \ft Moto akomi buku eye alingi kopesa ndimbola ya ebandela ya molóngó mobimba lokola bato ba mayele ba sikawa te. Buku eye ekomami na ntina ena te. Alingi bobele koyebisa ’te Nzambe akeli manso tokoki komono. Yango wana akaboli mango lokola azalaki komono mango o likolo, o mbu, o mokili, epai na epai. Alakisi bongo Nzambe lokola moto asali mikolo motoba, o mokolo moko moko mosala mosusu, mpo apema o mokolo mwa nsambo (Sabato), engebene na mobeko Nzambe apesaki ba-Israel. Kasi toyebi na bosolo ’te Nzambe akeli binso lokola mosali te, kasi se na ndinga ya ye: ekoki na Ye ’te akanisa byango mpo bizala. \f*.
\v 6 Nzambe alobi: «Etando ezala, ekabola mai mazali o likolo na mai mazali o nse»; esalemi se bongo.
\v 7 Nzambe akeli etando \f + \fr 1,7 \ft Ba-Israel, na bato banso ba eleko ena, bakanisaki ’te likolo lya mokili ezipeli enene ezalaki eye ekaboli nse eye na mai manene mazalaki o likolo. \f* ekaboli mai mazali o nse ya etando na mai mazali likolo;
si tu veux voir le 1er fichier, tu mets NR==FNR
si tu veux voir le second tu mets NR!=FNR
si tu veux voir les 2 , tu ne mets rien (debug)
Dernière modification par LeoMajor (Le 07/08/2019, à 20:13)
Hors ligne
#6 Le 08/08/2019, à 15:28
- L'Africain
Re : Améliorer script de fusion de deux fichiers
Désolé pour le délai!
Merci LeoMajor, je vais donc essayer d'être plus précis dans ma description.
dans le cas d'un titre qui commence par \s la note qui le suit concerne toujours le verset juste après. Par exemple, la note 1,3 aura pour correspondance dans le fichier usfm:
\s mon titre*
\p
\v 3 contenu du verset 3.
Pour l'linstant le script modifié fonctionne comme avant mais en cas de note après un titre il y mets les balises \f mais le contenu de la note n'y est pas ni le numéro du verset qui est remplacé par le "s" de la balise qui précède, par exemple:
\s2 Nzambi me ganga muntu: bakala ti nkento\f + \fr 2,S \ft \f*
\p Kilumbu ya Mfumu Nzambi gangaka ntoto ti zulu,
\v 5
devrait être:
\s2 Nzambi me ganga muntu: bakala ti nkento\f + \fr 2,5 \ft Contenu de ma note.\f*
\p Kilumbu ya Mfumu Nzambi gangaka ntoto ti zulu,
\v 5
Après je ne sais pas si c'est possible mais si durant la fusion on pouvait supprimer du fichier note ce qui est automatiquement intégré au fichier usfm ça pourrait m'aider à savoir ce qui manque dans le fichier fusionné.
Merci encore.
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#7 Le 09/08/2019, à 17:58
- LeoMajor
Re : Améliorer script de fusion de deux fichiers
à ajouter
$0~/^\\s .*[*]/ { found=0; til=$0; while(found==0){getline; if($1=="\\v"){back=$1" "$2; srf=$2; $1=$2=""; vv=$0; sub(/[*]/,"\\f + \\fr "rf","srf" \\ft "vv" \\f*",til); print til; for (i=1;i<=c;i++)print foo[i]; found=1; $0=back }else{c++; foo[c]=$0 }}}
cela donne
\c 1
\s Nzambe, Mozalisi walikolo \f + \fr 1,1 \ft O libandela Nzambe akeli likolo na nse. \f* nanse
\r vanille
\p
\r fraise
\v 1
\v 2 Nse ezalaka se mpamba, eloko yoko ezalaka wana te. Molili mozalaka bipai binso mpe mpema ya Nzambe ezalaka koleka likolo lya mai lokola mompepe.
\v 3 Nzambe alobi: «Mwinda mozala», mpe mwinda mobimi.
...
si tu veux que \v 1 soit supprimé, tu mets $0=back="" au lieu de $0=back
à modifier ( si $0 existe )
NR!=FNR{if($0)print}
l'hypothèse de départ est
\c 1
\s Nzambe, Mozalisi walikolo * nanse
\r vanille
\p
\r fraise
\v 1 O libandela Nzambe akeli likolo na nse.
\v 2 Nse ezalaka se mpamba, eloko yoko ezalaka wana te. Molili mozalaka bipai binso mpe mpema ya Nzambe ezalaka koleka likolo lya mai lokola mompepe.
\v 3 Nzambe alobi: «Mwinda mozala», mpe mwinda mobimi.
\v 4 Nzambe amoni ’te mwinda mozalaki malamu mpe akaboli mwinda na molili.
\v 5 Nzambe apesi mwinda nkombo moi, apesi molili nkombo butu. Mpokwa eyindi, ntongo etani: ezalaki mokolo mwa yambo *.
\v 6 Nzambe alobi: «Etando ezala, ekabola mai mazali o likolo na mai mazali o nse»; esalemi se bongo.
\v 7 Nzambe akeli etando * ekaboli mai mazali o nse ya etando na mai mazali likolo;
est-ce utile \s2 ?
Hors ligne
#8 Le 09/08/2019, à 18:44
- L'Africain
Re : Améliorer script de fusion de deux fichiers
Bonsoir,
Ça progresse dans le sens où j'ai bien le numéro de verset desormais dans le fichier fusionné, mais le contenu de la note n'est pas le bon, c'est le contenu du verset en question:
\s2 Nzambi me ganga muntu: bakala ti nkento\f + \fr 2,5 \ft ICI AULIEU DU TEXTE DE LA NOTE J'AI LE TEXTE DU VERSET 5 QUI LUI RESTE VIDE\f*
\p Kilumbu ya Mfumu Nzambi gangaka ntoto ti zulu,
\v 5
\v 6 Kansi masa
Pour la suppression c'est les notes que je souhaterais supprimer et non le verset.
J'ai repris aussi le bout de code initial, pour ne pas avoir l'erreur du #6, j'ai donc:
#!/bin/bash
#Ce script permet de fusionner des notes numérotées avec le chapitre et le verset séparé par une virgule. Fichier notes **.TXT, fichier texte *.usfm
for item in {0..80}
do printf -v id "%02d" "$item"; echo "${id}.usfm, ${id}.TXT"
awk -i inplace -v INPLACE_SUFFIX=.old '
$1 ~ /^[0-9]+\,[0-9]+/{
tmp=$1
$1=""
refs[tmp]=$0
$1=tmp
}
$1=="\\c" {rf=$2}
$1=="\\v" && /\*/ {
sub(/\*/,"\\f + \\fr "rf","$2" \\ft "refs[rf","$2]"\\f*",$0)
};
$0~/^\\s.*[*]/ { found=0; til=$0; while(found==0){getline; if($1=="\\v"){back=$1" "$2; srf=$2; $1=$2=""; vv=$0; sub(/[*]/,"\\f + \\fr "rf","srf" \\ft "vv" \\f*",til); print til; for (i=1;i<=c;i++)print foo[i]; found=1; $0=back }else{c++; foo[c]=$0 }}} {print}' "${id}.TXT" "${id}.usfm"
done
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#9 Le 10/08/2019, à 17:06
- LeoMajor
Re : Améliorer script de fusion de deux fichiers
cat 00_fichier.txt
\c 1
\s Nzambe, Mozalisi * walikolo nanse
\p
\v 1 O libandela Nzambe akeli likolo na nse.
\v 2 Nse ezalaka se mpamba, eloko yoko ezalaka wana te. Molili mozalaka bipai binso mpe mpema ya Nzambe ezalaka koleka likolo lya mai lokola mompepe.
\v 3 Nzambe alobi: «Mwinda mozala», mpe mwinda mobimi.
\v 4 Nzambe amoni ’te mwinda mozalaki malamu mpe akaboli mwinda na molili.
\v 5 Nzambe apesi mwinda nkombo moi, apesi molili nkombo butu. Mpokwa eyindi, ntongo etani: ezalaki mokolo mwa yambo * .
\v 6 Nzambe alobi: «Etando ezala, ekabola mai mazali o likolo na mai mazali o nse»; esalemi se bongo.
\v 7 Nzambe akeli etando * kaboli mai mazali o nse ya etando na mai mazali likolo;
\s2 clio picasso mini * espace
\p
\s3 vanille * fraise pistache
\p
\v 8 aaaaa
\v 9 bbbbb
cat 00_fichier_notes.txt
1,5 Moto akomi buku eye alingi kopesa ndimbola ya ebandela ya molóngó mobimba lokola bato ba mayele ba sikawa te. Buku eye ekomami na ntina ena te. Alingi bobele koyebisa ’te Nzambe akeli manso tokoki komono. Yango wana akaboli mango lokola azalaki komono mango o likolo, o mbu, o mokili, epai na epai. Alakisi bongo Nzambe lokola moto asali mikolo motoba, o mokolo moko moko mosala mosusu, mpo apema o mokolo mwa nsambo (Sabato), engebene na mobeko Nzambe apesaki ba-Israel. Kasi toyebi na bosolo ’te Nzambe akeli binso lokola mosali te, kasi se na ndinga ya ye: ekoki na Ye ’te akanisa byango mpo bizala.
1,7 Ba-Israel, na bato banso ba eleko ena, bakanisaki ’te likolo lya mokili ezipeli enene ezalaki eye ekaboli nse eye na mai manene mazalaki o likolo.
1,s kinshasa matadi muanda
1,s2 1,7
1,s3 goma kigali
awk '$1~/^[0-9]+\,[s0-9]+/ { file1=$0; if($2~/^[0-9]+\,[0-9]+$/){refs[$1]=refs[$2]}else{tmp=$1; $1=""; refs[tmp]=$0 }}; $1=="\\c" {rf=$2}; $0~/^\\s[0-9]* .*[*]/ { ss=substr($1,2,4) ; sub(/[*]/,"\\f + \\fr "rf","ss" \\ft "refs[rf","ss]" \\f*",$0); file1="" } ; $1=="\\v" && /[*]/ { sub(/[*]/,"\\f + \\fr "rf","$2" \\ft "refs[rf","$2]"\\f*",$0)}; FNR==NR{if(file1)print "file1",file1}; FNR!=NR{if($0)print}' /tmp/00_fichier_notes.txt /tmp/00_fichier.txt
file1 1,5 Moto akomi buku eye alingi kopesa ndimbola ya ebandela ya molóngó mobimba lokola bato ba mayele ba sikawa te. Buku eye ekomami na ntina ena te. Alingi bobele koyebisa ’te Nzambe akeli manso tokoki komono. Yango wana akaboli mango lokola azalaki komono mango o likolo, o mbu, o mokili, epai na epai. Alakisi bongo Nzambe lokola moto asali mikolo motoba, o mokolo moko moko mosala mosusu, mpo apema o mokolo mwa nsambo (Sabato), engebene na mobeko Nzambe apesaki ba-Israel. Kasi toyebi na bosolo ’te Nzambe akeli binso lokola mosali te, kasi se na ndinga ya ye: ekoki na Ye ’te akanisa byango mpo bizala.
file1 1,7 Ba-Israel, na bato banso ba eleko ena, bakanisaki ’te likolo lya mokili ezipeli enene ezalaki eye ekaboli nse eye na mai manene mazalaki o likolo.
file1 1,s kinshasa matadi muanda
file1 1,s2 1,7
file1 1,s3 goma kigali
\c 1
\s Nzambe, Mozalisi \f + \fr 1,s \ft kinshasa matadi muanda \f* walikolo nanse
\p
\v 1 O libandela Nzambe akeli likolo na nse.
\v 2 Nse ezalaka se mpamba, eloko yoko ezalaka wana te. Molili mozalaka bipai binso mpe mpema ya Nzambe ezalaka koleka likolo lya mai lokola mompepe.
\v 3 Nzambe alobi: «Mwinda mozala», mpe mwinda mobimi.
\v 4 Nzambe amoni ’te mwinda mozalaki malamu mpe akaboli mwinda na molili.
\v 5 Nzambe apesi mwinda nkombo moi, apesi molili nkombo butu. Mpokwa eyindi, ntongo etani: ezalaki mokolo mwa yambo \f + \fr 1,5 \ft Moto akomi buku eye alingi kopesa ndimbola ya ebandela ya molóngó mobimba lokola bato ba mayele ba sikawa te. Buku eye ekomami na ntina ena te. Alingi bobele koyebisa ’te Nzambe akeli manso tokoki komono. Yango wana akaboli mango lokola azalaki komono mango o likolo, o mbu, o mokili, epai na epai. Alakisi bongo Nzambe lokola moto asali mikolo motoba, o mokolo moko moko mosala mosusu, mpo apema o mokolo mwa nsambo (Sabato), engebene na mobeko Nzambe apesaki ba-Israel. Kasi toyebi na bosolo ’te Nzambe akeli binso lokola mosali te, kasi se na ndinga ya ye: ekoki na Ye ’te akanisa byango mpo bizala.\f* .
\v 6 Nzambe alobi: «Etando ezala, ekabola mai mazali o likolo na mai mazali o nse»; esalemi se bongo.
\v 7 Nzambe akeli etando \f + \fr 1,7 \ft Ba-Israel, na bato banso ba eleko ena, bakanisaki ’te likolo lya mokili ezipeli enene ezalaki eye ekaboli nse eye na mai manene mazalaki o likolo.\f* kaboli mai mazali o nse ya etando na mai mazali likolo;
\s2 clio picasso mini \f + \fr 1,s2 \ft Ba-Israel, na bato banso ba eleko ena, bakanisaki ’te likolo lya mokili ezipeli enene ezalaki eye ekaboli nse eye na mai manene mazalaki o likolo. \f* espace
\p
\s3 vanille \f + \fr 1,s3 \ft goma kigali \f* fraise pistache
\p
\v 8 aaaaa
\v 9 bbbbb
si il y a des choses qui manquent, tu adaptes et puis voilà ....
je considère que le sujet est clos (trop de calculs intermédiaires dans tes topics (sed++ awk++ ...) , manque de portabilité).
bon week-end
Hors ligne