Saya harus melihat beberapa baris terakhir dari file besar (ukuran khasnya adalah 500MB-2GB). Saya mencari yang setara dengan perintah Unix tail
untuk Windows Powershell. Beberapa alternatif yang tersedia adalah,
http://tailforwin32.sourceforge.net/
dan
Dapatkan-Konten [nama file] | Select-Object -Last 10
Bagi saya, tidak diperbolehkan menggunakan alternatif pertama, dan alternatif kedua lambat. Adakah yang tahu tentang implementasi ekor yang efisien untuk PowerShell.
windows
powershell
tail
mutelogan
sumber
sumber
tail
perintah yang disediakan di sourceforge.net/projects/unxutils/files/unxutils/current/… ?Get-Content [filename] -last 10
dan tambahkan-tail
untuk -fJawaban:
Gunakan
-wait
parameter dengan Get-Content, yang menampilkan baris ketika mereka ditambahkan ke file. Fitur ini hadir di PowerShell v1, tetapi untuk beberapa alasan tidak didokumentasikan dengan baik di v2.Berikut ini sebuah contoh
Setelah Anda menjalankan ini, perbarui dan simpan file dan Anda akan melihat perubahan di konsol.
sumber
man gc -par wait
memberi tahu saya tidak ada parameter. Tapi saya pikir ini tidak menyelesaikan masalah yang dimiliki OP, karena mereka memintatail
, tidaktail -f
dan implementasi yang efisien juga. Karena yang ini juga membaca file lengkap sebelum mengembalikan baris terakhir, ini menyakitkan untuk ukuran file yang mereka harapkan.Untuk kelengkapan saya akan menyebutkan bahwa Powershell 3.0 sekarang memiliki flag -Tail pada Get-Content
mendapat 10 baris terakhir file
mendapat 10 baris terakhir file dan menunggu lebih
Juga, untuk pengguna * nix tersebut, perhatikan bahwa sebagian besar sistem alias cat to Get-Content, jadi ini biasanya berfungsi
sumber
Get-Content .\test.txt -Wait -Tail 1
Get-Content -Path .\sync.log -Wait -Tail 10
-Wait
parameter tidak berfungsi untuk Anda?Pada PowerShell versi 3.0, cmdlet Get-Content memiliki parameter -Tail yang akan membantu. Lihat bantuan online pustaka technet untuk Get-Content.
sumber
Saya menggunakan beberapa jawaban yang diberikan di sini, tetapi hanya untuk itu saja
akan mengunyah memori setelah beberapa saat. Seorang kolega meninggalkan "ekor" seperti itu pada hari terakhir dan mencapai 800 MB. Saya tidak tahu apakah Unix tail berperilaku dengan cara yang sama (tapi saya ragu). Jadi tidak apa-apa untuk digunakan untuk aplikasi jangka pendek, tapi hati-hati dengan itu.
sumber
Ekstensi Komunitas PowerShell (PSCX) menyediakan
Get-FileTail
cmdlet . Sepertinya solusi yang cocok untuk tugas itu. Catatan: Saya tidak mencobanya dengan file yang sangat besar tetapi deskripsi mengatakan itu efisien isi dan dirancang untuk file log besar.sumber
Get-Content [filename] | Select-Object -Last 10
itu tidak dapat dibatalkanHanya beberapa tambahan pada jawaban sebelumnya. Ada alias yang didefinisikan untuk Get-Content, misalnya jika Anda terbiasa dengan UNIX yang mungkin Anda sukai
cat
, dan ada jugatype
dangc
. Jadi, bukannyakamu bisa menulis
sumber
Menggunakan Powershell V2 dan di bawah ini, get-content membaca seluruh file, jadi tidak ada gunanya bagi saya. Kode berikut berfungsi untuk apa yang saya butuhkan, meskipun ada beberapa masalah dengan pengkodean karakter. Ini secara efektif tail -f, tetapi bisa dengan mudah dimodifikasi untuk mendapatkan x byte terakhir, atau x baris terakhir jika Anda ingin mencari mundur untuk jeda baris.
Saya menemukan sebagian besar kode untuk melakukan ini di sini .
sumber
Saya mengambil solusi @ hajamie dan membungkusnya menjadi pembungkus skrip yang sedikit lebih nyaman.
Saya menambahkan opsi untuk memulai dari offset sebelum akhir file, sehingga Anda dapat menggunakan fungsionalitas seperti ekor untuk membaca jumlah tertentu dari akhir file. Perhatikan offset dalam byte, bukan garis.
Ada juga opsi untuk terus menunggu lebih banyak konten.
Contoh (dengan asumsi Anda menyimpan ini sebagai TailFile.ps1):
Dan ini skripnya sendiri ...
sumber
mencoba
Windows Server 2003 Resource Kit Tools
ini berisi a
tail.exe
yang dapat dijalankan pada sistem Windows.https://www.microsoft.com/en-us/download/details.aspx?id=17657
sumber
Sangat mendasar, tetapi melakukan apa yang Anda butuhkan tanpa tambahan modul atau persyaratan versi PS:
while ($true) {Clear-Host; gc E:\test.txt | select -last 3; sleep 2 }
sumber
while($true) { Clear-Host; Get-Content <filename> -tail 40; sleep 1 }
:)Mungkin terlambat untuk menjawab tetapi, coba yang ini
sumber
Ada banyak jawaban yang valid, namun, tidak satupun dari mereka memiliki sintaks yang sama dengan tail di linux . Fungsi berikut dapat disimpan di
$Home\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
untuk kegigihan Anda (lihat dokumentasi profil powershell untuk lebih jelasnya).Ini memungkinkan Anda menelepon ...
yang datang cukup dekat dengan sintaks linux.
sumber