Concaténation de 2 lignes sur la même ligne via >>
Résolu_Ritchi_ Messages postés 21333 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis en quête d'une solution qui me permettrait en bash, de récupérer une ligne dans un fichier N,
la copier dans un fichier X,
puis récupérer une ligne dans un autre fichier
et la copier dans le fichier X sur la même ligne que la donnée précédente
actuellement je procède de la sorte :
head -n ${numeroDeLigne} ${fichier} | tail -n 1 >> FichierDeDestination
Sans surprise, j'arrive à récupérer ce que je souhaite, sauf que j'ai toutes mes données sur une seule colonne.
Je souhaite pouvoir agencer mes éléments sous forme d'un tableau, ça faciliterait les imports dans un tableur.
Pour l'instant j'exclus un pré-traitement qui me forcerait à récupérer le contenu de mon fichier d'écriture pour constituer une ligne temporaire à laquelle j'ajouterais la nouvelle ligne (un peu long pour de grandes BDD, non?)
Auriez-vous des suggestions pour y parvenir?
Merci d'avance pour vos idées
- Concaténation de 2 lignes sur la même ligne via >>
- Partage de photos en ligne - Guide
- Aller à la ligne excel - Guide
- Mètre en ligne - Guide
- Formulaire en ligne de meta - Guide
- Site de vente en ligne particulier - Guide
1 réponse
J'ai fini par opter pour ce que je pense ne pas être idéal.
Ci-dessous l'approche algorithmique réalisée :
boucle de parcours des dossiers à traiter (nb: s'assurer que ce sont bien des répertoires qui sont traités if [ -d $file ])
boucle de parcours du numéro de ligne à récupérer dans le fichier de prélèvement
boucle de parcours de chaque fichier à lire
si tout premier parcours de fichier dans un répertoire :
écrire directement dans le fichier de destination (permet la création du fichier)
se servir d'une variable 'balise' pour signaler qu'il ne s'agit plus de la première lecture
sinon
initialiser une variable correspondant à la dernière ligne du fichier de destination
lire la ligne à récupérer
supprimer la dernière ligne dans le fichier de destination : commande $(sed -i '$d' $fichierDeDestination)
avec -i : traite le fichier (n'est plus un simple filtre) ; $d == dernière ligne
ajouter la concaténation de la sauvegarde de l'ancienne dernière ligne avec la ligne à récupérer
commande echo "${derniereLigne} head -n ${numeroDeLigne} $fichierLu | tail -n 1" >> $fichierDeDestination
fin si
fin boucle
fin boucle
fin boucle
Si je n'ai rien oublié dans mes recopiages voici une méthode qui a au moins le mérite d'être fonctionnelle :
De la sorte nous obtenons un tableau de résultats, importable à souhait dans un tableur.
Bonjour,
Merci pour ce retour sur la solution que tu as implémentée et testée.
L'emploi de "sed" ou "awk" est une bonne solution pour manipuler le contenu d'un fichier.
Ritchi