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

Résolu
arscy Messages postés 196 Statut Membre -  
_Ritchi_ Messages postés 21130 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

1 réponse

  1. arscy Messages postés 196 Statut Membre 8
     

    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
    1. _Ritchi_ Messages postés 21130 Date d'inscription   Statut Contributeur Dernière intervention   6 135
       

      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