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=str
menandai 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.log
dan two.log
(semua argumen setelah :::
).
Opsi --line-buffer
ini diperlukan karena output dari suatu perintah (misalnya tail -f one.log
atau tail -f two.log
) akan dicetak jika perintah itu selesai. Karena tail -f
akan menunggu pertumbuhan file, maka diperlukan untuk mencetak output secara garis yang --line-buffer
melakukannya. 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.