Saya mungkin akan menggunakan sed
untuk pekerjaan ini:
line=3
sed -e "${line}r file2" file1
Jika Anda ingin menimpa file1
dan Anda memiliki GNU sed
, tambahkan -i
pilihan. Jika tidak, tulis ke file sementara lalu salin/pindahkan file sementara ke file asli, bersihkan seperlunya (yaitu trap
barang di bawah). Catatan:menyalin sementara di atas file mempertahankan tautan; bergerak tidak (tetapi lebih cepat, terutama jika filenya besar).
line=3
tmp="./sed.$$"
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
sed -e "${line}r file2" file1 > $tmp
cp $tmp file1
rm -f $tmp
trap 0
Hanya untuk bersenang-senang, dan hanya karena kita semua menyukai ed
, editor standar, ini adalah ed
Versi:kapan. Ini sangat efisien (ed
adalah asli editor teks)!
ed -s file2 <<< $'3r file1\nw'
Jika nomor baris disimpan dalam variabel line
lalu:
ed -s file2 <<< "${line}r file1"$'\nw'
Hanya untuk menyenangkan Zack, ini satu versi dengan lebih sedikit bashism, jika Anda tidak suka bash (secara pribadi, saya tidak suka pipa dan subkulit, saya lebih suka herestrings, tapi hei, seperti yang saya katakan, itu hanya untuk menyenangkan Zack):
printf "%s\n" "${line}r file1" w | ed -s file2
atau (untuk menyenangkan Sorpigal):
printf "%dr %s\nw" "$line" file1 | ed -s file2
Seperti yang disebutkan Jonathan Leffler dalam komentar, dan jika Anda bermaksud menggunakan metode ini dalam skrip, gunakan heredoc (biasanya yang paling efisien):
ed -s file2 <<EOF
${line}r file1
w
EOF
Semoga ini bisa membantu!
P.S. Jangan ragu untuk meninggalkan komentar jika Anda merasa perlu mengekspresikan diri tentang cara mengemudi ed
, editor standar.
cat file1 >>file2
akan menambahkan konten file1 ke file2.
cat file1 file2
akan menggabungkan file1 dan file2 dan mengirim keluaran ke terminal.
cat file1 file2 >file3
akan membuat atau menimpa file3 dengan penggabungan file1 dan file2
cat file1 file2 >>file3
akan menambahkan gabungan file1 dan file2 ke akhir file3.
Edit :
Untuk trunking file2 sebelum menambahkan file1:
sed -e '11,$d' -i file2 && cat file1 >>file2
atau untuk membuat file 500 baris:
n=$((500-$(wc -l <file1)))
sed -e "1,${n}d" -i file2 && cat file1 >>file2