Bagaimana saya bisa menyalin konten file teks dan menempelkannya ke yang lain mulai pada baris tertentu?


12

Saya perlu menyalin konten file teks dan menempelkannya ke file teks lain. File teks pertama memiliki 10 baris data dan saya perlu mereka disalin ke file teks kedua mulai dari baris nomor 5 (misalnya). Jadi dalam file teks kedua data tersebut harus ditulis dari baris 5 ke baris 14. Bagaimana ini bisa dilakukan? Terima kasih sebelumnya. Anggap saya sebagai pemula tentang Linux.

Jawaban:


9

headdan tailsolusi

Asumsikan file sumber dipanggil ~/adan file yang akan dimasukkan dipanggil ~/b. Kami akan memasukkan file yang digabungkan ke ~/c:

head -n 5 ~/a > ~/c
cat ~/b >> ~/c
tail --lines=+6 ~/a >> ~/c
  • Jalannya ~/pendek untuk /home/usernama direktori Anda
  • kepala menyalin lima baris file pertama ake file yang baru dibuatc
  • cat mencantumkan isi file bdan menambahkannya ke filec
  • tail menambahkan file amulai dari baris 6 hingga akhir filec

Setelah verifikasi ganti nama file yang digabungkan

Setelah memverifikasi file citu digabungkan dengan benar dari file adan bkami akan mengganti nama cuntuk amenggunakan:

mv ~/c ~/a
  • mvmemindahkan file cke file a. Data tidak dipindahkan secara fisik. File hanya diganti namanya yang menghemat waktu.

Terima kasih atas jawaban Anda. Itu bekerja dengan baik. Namun apakah ada cara lain untuk melakukan ini tanpa menggunakan file teks ketiga?
G. Paschalis

File ketiga dapat diubah namanya menjadi file sumber setelah selesai. Saya pikir yang terbaik untuk dapat melihat file terlebih dahulu. Saya akan menambahkan langkah-langkah tambahan untuk jawabannya sekarang.
WinEunuuchs2Unix

Atau ...(head -n 5 a.txt ; cat b.txt ; tail -n +6 a.txt) > c.txt

1
@ Jojo Itu adalah ringkasan satu baris yang bagus :) Untuk tujuan pengajaran saya lebih suka menggunakan satu baris per metode perintah dan pernyataan bersarang jika. Namun untuk copy dan paste ke terminal saya suka one liners!
WinEunuuchs2Unix

16

Alat termudah di sini mungkin sed. Untuk memasukkan b.txtke dalam a.txtsetelah baris ke-5, Anda bisa menulis:

sed '5r b.txt' a.txt

sedmembaca file yang ditentukan sebagai argumen ( a.txt) baris demi baris. Semua baris direproduksi dalam output sama seperti yang muncul di input, kecuali jika mereka diubah oleh perintah.

Ini 5adalah alamat (nomor baris) di mana perintah berikut harus dijalankan. Perintah yang kita gunakan adalah r, yang mengambil nama file sebagai argumen (di sini b.txt), membacanya sepenuhnya dan memasukkannya ke dalam output setelah baris saat ini.

Seperti berdiri di atas, sedbaris perintah ini hanya akan mencetak output ke terminal, tanpa menulis ke file apa pun. Anda dapat mengarahkannya ke file baru (bukan file input mana pun!) Menggunakan pengalihan output Bash:

sed '5r b.txt' a.txt > c.txt

Atau Anda dapat langsung mengubah luar file input a.txtdengan menggunakan sed's -i(untuk 'di tempat') switch. Jika Anda menuliskannya -i.bak, itu akan membuat salinan cadangan dari file input asli dengan akhiran .bakpertama:

sed -i '5r b.txt' a.txt

Sebuah contoh:

$ cat a.txt 
January
February
March
April
May
October
November
December

$ cat b.txt 
June
July
August
September

$ sed '5r b.txt' a.txt
January
February
March
April
May
June
July
August
September
October
November
December

0

(Menggunakan kembali contoh elegan dari @ByteCommander :)

awk '1; NR==5 {system("cat b.txt")}' a.txt
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.