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 10/04/2014, à 18:05

soupaloignon

[Réglé] 2 groupes d'infos sur une ligne à passer en 2 lignes

Bonjour à tous,

J'ai un fichier contenant des infos structurées de la manière suivante :

Info 1A
Info 1B
Info 1C
Info 1D
Info 1E

Info 2A
Info 2B
Info 2C
Info 2D
Info 2E

Info 3A
Info 3B
Info 3C
Info 3D
Info 3E

La 3ème ligne de chaque bloc est un code postal (5 chiffres sans espaces) + 1 espace (éventuellement plusieurs) + la ville


Est ce qu'il y aurait un moyen de trouver chaque ligne commençant par 5 chiffres et faire un retour à la ligne après le 5ème chiffre.
Ensuite je pense qu'un coup de

sed -i 's/^[ \t]*// MonFichier

enlèvera correctement le ou les espaces devant la nouvelle ligne contenant la ville


Edit : Et de cette manière il n'y aura plus d'erreurs pour passer cette ligne de code : http://forum.ubuntu-fr.org/viewtopic.php?id=1544071

Dernière modification par soupaloignon (Le 10/04/2014, à 19:41)


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#2 Le 10/04/2014, à 18:08

pingouinux

Re : [Réglé] 2 groupes d'infos sur une ligne à passer en 2 lignes

Re-bonjour,
Peux-tu donner un exemple plus concret (avec les codes postaux), et le résultat que tu souhaites ?

Édité : Pour ne récupérer que les lignes "code_postal ville"

sed -rn 's/^([0-9]{5})\s+(.*)/\1\n\2/p' MonFichier

Dernière modification par pingouinux (Le 10/04/2014, à 18:19)

Hors ligne

#3 Le 10/04/2014, à 18:36

soupaloignon

Re : [Réglé] 2 groupes d'infos sur une ligne à passer en 2 lignes

Ce que j'ai au départ (plusieurs blocs d'infos structurés de cette manière, et séparés par une ligne vide)

Un nom
l'adresse
31000 Toulouse
Tél : 05 05 05 05 05
Nom du responsable


et le but est d'obtenir :

Un nom
l'adresse
31000
Toulouse
Tél : 05 05 05 05 05
Nom du responsable


(ensuite j’enlèverai "Tél : " avec un coup de sed)


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#4 Le 10/04/2014, à 18:46

pingouinux

Re : [Réglé] 2 groupes d'infos sur une ligne à passer en 2 lignes

sed -r 's/^([0-9]{5})\s+(.*)/\1\n\2/' MonFichier

Édité : Et pour enlever dans la foulée la ligne commençant par "Tél :"

sed -r 's/^([0-9]{5})\s+(.*)/\1\n\2/;/^Tél\s*:/d' MonFichier

Si c'est juste pour enlever "Tél : " en début de ligne

sed -r 's/^([0-9]{5})\s+(.*)/\1\n\2/;s/^Tél\s*:\s*//' MonFichier

Dernière modification par pingouinux (Le 10/04/2014, à 18:53)

Hors ligne

#5 Le 10/04/2014, à 19:30

soupaloignon

Re : [Réglé] 2 groupes d'infos sur une ligne à passer en 2 lignes

pingouinux a écrit :

Si c'est juste pour enlever "Tél : " en début de ligne

sed -r 's/^([0-9]{5})\s+(.*)/\1\n\2/;s/^Tél\s*:\s*//' MonFichier

Un grand merci, cela fonctionne nickel smile

Par rapport à mon fichier d'origine je n'ai donc qu'a envoyer cette ligne de code, et ensuite celle que tu m'as donné sur l'autre post

awk -v ORS="" '!/^[\s]*$/{print $0";";if(!(++n%6))printf"\n"}' MonFichier

Et tout est prêt pour un copier coller dans calc. Que de temps de gagné !!


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#6 Le 11/04/2014, à 04:49

nesthib

Re : [Réglé] 2 groupes d'infos sur une ligne à passer en 2 lignes

Si tu veux importer tes données dans calc et que tu as des multiples données client, peut être y gagnerais-tu à générer un fichier au format CSV :

Un nom1, l'adresse1, 31001, Ville1, 05 05 05 05 01, Nom du responsable1
Un nom2, l'adresse2, 31002, Ville2, 05 05 05 05 02, Nom du responsable2
…

Que tu peux obtenir simplement avec :

awk 'BEGIN{RS="\n\n+";FS="\n";OFS=", "}$1=$1' fichier

Et en combinant les substitutions :

awk 'BEGIN{RS="\n\n+";FS="\n";OFS=";"}{gsub("Tél : *","");gsub(/[0-9]{5} /,"&"OFS);$1=$1;print}' fichier

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 11/04/2014, à 12:39

soupaloignon

Re : [Réglé] 2 groupes d'infos sur une ligne à passer en 2 lignes

nesthib a écrit :

Si tu veux importer tes données dans calc et que tu as des multiples données client, peut être y gagnerais-tu à générer un fichier au format CSV :

Bonjour, et merci pour ta réponse

Dans l'utilisation que je fais du fichier, le copier coller dans calc est plus simple car je le positionne à coté d'autres blocs d'infos (déjà présent dans calc) dans lesquels je dois également récupérer de l'info.
Et c'est ensuite à partir de calc que je génère un csv de l'ensemble pour importer ensuite dans vTiger (un super soft soit dit en passant)


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne