Jawaban singkat
GNU Parallel memiliki serangkaian opsi bagus yang membuatnya sangat mudah untuk melakukan hal-hal seperti itu:
parallel --tagstring "{}:" --line-buffer tail -f {} ::: one.log two.log
Outputnya adalah:
one.log: isi one.log di sini ...
one.log: isi one.log di sini ...
two.log: isi two.log di sini ...
two.log: isi two.log di sini ...
Penjelasan lebih lanjut
- Opsi
--tagstring=strmenandai setiap baris output dengan str str . Dari parallel halaman manual :
--tagstring str
Tandai baris dengan string. Setiap jalur output akan diawali dengan
str dan TAB (\ t). str dapat berisi string pengganti seperti {}.
--tagstring diabaikan ketika menggunakan -u, --onall, dan --nonall.
Semua kemunculan {}akan digantikan oleh argumen paralel yang, dalam hal ini, adalah nama file log; yaitu one.logdan two.log(semua argumen setelah :::).
Opsi --line-bufferini diperlukan karena output dari suatu perintah (misalnya tail -f one.logatau tail -f two.log) akan dicetak jika perintah itu selesai. Karena tail -fakan menunggu pertumbuhan file, maka diperlukan untuk mencetak output secara garis yang --line-buffermelakukannya. Lagi dari parallel halaman manual :
--line-buffer (pengujian alfa)
Output buffer berdasarkan garis. --group akan menyimpan hasilnya
bersama untuk seluruh pekerjaan. --ungroup memungkinkan output untuk digabungkan
setengah garis datang dari satu pekerjaan dan setengah garis datang dari
pekerjaan lain. --line-buffer cocok di antara keduanya: paralel GNU
akan mencetak satu baris penuh, tetapi akan memungkinkan untuk mencampur garis
pekerjaan yang berbeda.
-v(verbose) untuk ekor. Ini mungkin tidak persis cocok dengan permintaan Anda, tetapi ini adalah permulaan.