GNU/Linux >> Linux Esercitazione >  >> Linux

Sostituire le righe che corrispondono a un motivo con le righe di un altro file in ordine?

Voglio sostituire le righe che corrispondono a un modello da un file dalle righe in ordine da un altro file, ad esempio, dato:

file1.txt :

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

ci piace sostituire le righe che iniziano con !! con le righe di questo file:

file2.txt :

first line
second line
third line

quindi il risultato dovrebbe essere:

aaaaaa
bbbbbb
first line
second line
ccccc
ddddd
third line

Risposta accettata:

Facile può essere fatto con awk

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

Altra versione

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. Sostituire una riga con un altro contenuto utilizzando Sed e Parallel per un file di grandi dimensioni?

  2. Sostituire Intervallo di linee con Intervallo di linee (sed o altro)?

  3. Come aggiungere più righe a un file?

  4. Duplicato, con poche piccole modifiche, poche righe in un file di testo?

  5. come copiare le righe da 10 a 15 di un file in un altro file, in unix?

Come inviare un'e-mail con allegato file dalla riga di comando

Come rimuovere le righe da un file usando il comando Sed

Come rimuovere le linee che appaiono sul file B da un altro file A?

Come sostituire il testo come sed con python?

Trova un file corrispondente a un determinato modello e assegna quel nome di file come valore a una variabile nello script di shell?

sostituire le righe in un file con le righe in un altro per numero di riga