GNU/Linux >> Belajar Linux >  >> Linux

Ganti Garis yang Mencocokkan Pola Dengan Garis Dari File Lain Secara Berurutan?

Saya ingin mengganti baris yang cocok dengan pola dari satu file dari baris dalam urutan dari file lain, misalnya, diberikan:

file1.txt :

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

kami ingin mengganti baris yang dimulai dengan !! dengan baris file ini:

file2.txt :

first line
second line
third line

jadi hasilnya seharusnya:

aaaaaa
bbbbbb
first line
second line
ccccc
ddddd
third line

Jawaban yang Diterima:

Mudah dapat dilakukan dengan awk

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

Versi lain

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. Uji Apakah Ada File Yang Cocok Dengan Pola Untuk Mengeksekusi Skrip?

  2. Ganti Baris Dengan Konten Lain Menggunakan Sed Dan Paralel Untuk File Besar?

  3. Ganti Rentang Garis Dengan Rentang Garis (sed Atau Lainnya)?

  1. Pertahankan Hanya Baris Pertama Dari Setiap Urutan Garis Berturut-turut yang Cocok dengan Pola?

  2. Duplikat, Dengan Beberapa Perubahan Kecil, Beberapa Baris Dalam File Teks?

  3. Bagaimana melakukan sed like text ganti dengan python?

  1. Hapus Beberapa Baris Pertama Secara Efisien Dari File Teks?

  2. Temukan file yang cocok dengan pola tertentu dan berikan nama file itu sebagai nilai ke variabel dalam skrip shell?

  3. ganti baris dalam satu file dengan baris lain dengan nomor baris