Concaténation de 2 lignes sur la même ligne via >>

Résolu/Fermé
arscy Messages postés 173 Date d'inscription dimanche 26 janvier 2014 Statut Membre Dernière intervention 5 octobre 2023 - 11 févr. 2023 à 16:04
_Ritchi_ Messages postés 21209 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 7 avril 2024 - 12 févr. 2023 à 11:19

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

A voir également:

1 réponse

arscy Messages postés 173 Date d'inscription dimanche 26 janvier 2014 Statut Membre Dernière intervention 5 octobre 2023 9
11 févr. 2023 à 20:11

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.

0
_Ritchi_ Messages postés 21209 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 7 avril 2024 6 058
12 févr. 2023 à 11:19

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

0