File1:
.tid.setnr := 1123
.tid.setnr := 3345
.tid.setnr := 5431
.tid.setnr := 89323
File2:
.tid.info := 12
.tid.info := 3
.tid.info := 44
.tid.info := 60
Berkas keluaran:
.tid.info := 12
.tid.setnr := 1123
.tid.info := 3
.tid.setnr := 3345
.tid.info := 44
.tid.setnr := 5431
.tid.info := 60
.tid.setnr := 89323
text-processing
awk
sed
paste
pmaipmui
sumber
sumber
Jawaban:
Menggunakan
paste
:sumber
Solusi awk lainnya:
sumber
The
paste
solusi adalah yang paling portabel dan paling efisien. Saya hanya menyebutkan alternatif ini jika Anda lebih suka perilakunya dalam kasus di mana kedua file tidak memiliki jumlah baris yang sama:Dengan GNU
sed
:Jika
file1
memiliki lebih sedikit baris daripadafile2
, maka ketikafile1
habis,sed
tidak akan menghasilkan apa pun untuk itu (sebagai lawan dari baris kosong untukpaste
).Jika
file1
memiliki lebih banyak garis darifile2
, maka garis-garis tambahan tersebut akan dibuang (sebagai lawan mencetak baris kosong untukfile2
denganpaste
).sumber
Menggunakan
awk
(gawk
,nawk
,mawk
):NR==FNR {x[FNR]=$0;next}
:NR==FNR
hanya cocok jika nomor catatan saat ini sama dengan nomor catatan file saat ini (karenanya hanya cocok saat memproses file pertama): menyimpan catatan yang saat ini diproses ke dalam arrayx
pada indeks sama dengan nomor catatan file saat ini dan melompati catatan saat ini{print x[FNR]"\n"$0}
: mencetak konten arrayx
pada indeks yang sama dengan nomor catatan file saat ini diikuti oleh baris baru dan oleh konten catatan saat inisumber
file1
danfile2
di perintah.mawk
juga, dan itu berjalan di atasnya juga. Pokoknya menjadi wajar saya tidak bisa melihat mengapa hal itu tidak harus bekerja hanya sebaliknya (yaitu hanya dengan beralih file). Bukannyaawk
peduli dengan input, garis adalah garis. Jika sesuatu tidak didukung oleh versinya, itu baru saja rusak pertama kali. Caranya lebih mudah, cukup OP melakukan kesalahan saat mengganti file input dalam argumen.Solusi termudah diberikan di bawah ini.
atau
sumber
file1
kemudian satu baris darifile2
dan seterusnya ...)