file cat1
foo
ice
two
file cat2
bar
cream
hundred
Output yang diinginkan:
foobar
icecream
twohundred
file1 dan file2 akan selalu memiliki jumlah baris yang sama dalam skenario saya, jika hal itu membuat segalanya lebih mudah.
Alat yang tepat untuk pekerjaan ini mungkin paste
paste -d '' file1 file2
Lihat man paste
detailnya.
Anda juga bisa menggunakan pr
perintah:
pr -TmJS"" file1 file2
dimana
-T
mematikan pagination-mJ
m file erge, J garis penuh oining-S""
pisahkan kolom dengan string kosong Jika Anda benar - benar ingin melakukannya menggunakan shell bash murni (tidak disarankan), maka inilah yang saya sarankan:
while IFS= read -u3 -r a && IFS= read -u4 -r b; do
printf '%s%s\n' "$a" "$b"
done 3<file1 4<file2
(Hanya termasuk ini karena subjek muncul dalam komentar untuk solusi murni-bash yang diusulkan.)
Melalui cara awk :
getline x<"file2"
membaca seluruh baris dari file2 dan menampung variabel x .print $0x
mencetak seluruh baris dari file1 dengan menggunakan$0
makax
yang merupakan garis tersimpan file2 .sumber
paste
adalah cara untuk pergi . Jika Anda ingin memeriksa beberapa metode lain, berikut inipython
solusinya:Jika Anda memiliki beberapa baris:
Perhatikan bahwa untuk jumlah baris yang tidak sama, baris ini akan berakhir di baris terakhir file yang berakhir lebih dulu.
sumber
Juga, dengan pure
bash
(perhatikan bahwa ini benar-benar akan mengabaikan baris kosong):sumber
mapfile
untuk membaca file ke dalam array, atau menggunakan loop sementara dengan duaread
perintah, membaca dari masing-masing fd mereka.array=( $(cmd) )
atauarray=( $var )
. Gunakanmapfile
sebagai gantinya.Cara perl, mudah dimengerti:
Dimulai dari:
Keluaran:
sumber