GNU/Linux >> Tutoriels Linux >  >> Linux

Remplacer les lignes correspondant à un motif par des lignes d'un autre fichier dans l'ordre ?

Je souhaite remplacer les lignes correspondant à un motif d'un fichier à partir des lignes dans l'ordre d'un autre fichier, par exemple, étant donné :

fichier1.txt :

aaaaaa
bbbbbb
!! 1234
!! 4567
ccccc
ddddd
!! 1111

nous aimons remplacer les lignes commençant par !! avec les lignes de ce fichier :

fichier2.txt :

first line
second line
third line

donc le résultat devrait être :

aaaaaa
bbbbbb
first line
second line
ccccc
ddddd
third line

Réponse acceptée :

Facile peut être fait avec awk

awk '
    /^!!/{                    #for line stared with `!!`
        getline <"file2.txt"  #read 1 line from outer file into $0 
    }
    1                         #alias for `print $0`
    ' file1.txt

Autre version

awk '
    NR == FNR{         #for lines in first file
        S[NR] = $0     #put line in array `S` with row number as index 
        next           #starts script from the beginning
    }
    /^!!/{             #for line stared with `!!`
        $0=S[++count]  #replace line by corresponded array element
    }
    1                  #alias for `print $0`
    ' file2.txt file1.txt

Linux
  1. Tester s'il existe des fichiers correspondant à un modèle afin d'exécuter un script ?

  2. Supprimer efficacement les premières lignes d'un fichier texte ?

  3. Conserver uniquement la première ligne de chaque séquence de lignes consécutives correspondant à un motif ?

  4. Comment ajouter plusieurs lignes à un fichier ?

  5. Dupliquer, avec quelques petites modifications, quelques lignes dans un fichier texte ?

Comment envoyer un e-mail avec une pièce jointe à partir de la ligne de commande

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment remplacer un fichier en jar par une ligne de commande sous Linux ?

Linux - grep de certaines lignes à la fin du fichier

Trouver un fichier correspondant à un certain modèle et donner ce nom de fichier comme valeur à une variable dans un script shell ?

remplacer les lignes d'un fichier par les lignes d'un autre par numéro de ligne