Solusi 1:
sed -n '10000000,10000020p' filename
Anda mungkin dapat mempercepatnya sedikit seperti ini:
sed -n '10000000,10000020p; 10000021q' filename
Dalam perintah tersebut, opsi -n
menyebabkan sed
untuk "menekan pencetakan otomatis ruang pola". p
perintah "cetak [s] ruang pola saat ini" dan q
perintah "Segera keluar [s] skrip sed tanpa memproses input lagi ..." Kutipan berasal dari sed
man
halaman.
Omong-omong, perintah Anda
tail -n 10000000 filename | head 10
dimulai pada baris kesepuluh juta dari akhir file, sementara perintah "tengah" Anda tampaknya mulai dari sepersepuluh juta dari awal yang setara dengan:
head -n 10000010 filename | tail 10
Masalahnya adalah bahwa untuk file yang tidak disortir dengan garis panjang variabel, proses apa pun harus melalui file yang menghitung baris baru. Tidak ada cara untuk memotongnya.
Namun, jika file diurutkan (file log dengan cap waktu, misalnya) atau memiliki garis panjang tetap, maka Anda dapat mencari ke dalam file berdasarkan posisi byte. Dalam contoh file log, Anda dapat melakukan pencarian biner untuk rentang waktu seperti yang dilakukan skrip Python saya di sini*. Dalam kasus file dengan panjang rekaman tetap, itu sangat mudah. Anda tinggal mencari linelength * linecount
karakter ke dalam file.
Solusi 2:
Saya menemukan penggunaan sed
berikut
sed -n '10000000,+20p' filename
Semoga bermanfaat bagi seseorang!
Solusi 3:
Ini adalah pertama kalinya saya memposting di sini! Bagaimanapun, yang ini mudah. Katakanlah Anda ingin menarik garis 8872 dari file Anda yang bernama file.txt. Inilah cara Anda melakukannya:
cat -n file.txt | grep '^ *8872'
Sekarang pertanyaannya adalah menemukan 20 baris setelah ini. Untuk mencapai ini, Anda melakukan
cat -n file.txt | grep -A 20 '^ *8872'
Untuk baris di sekitar atau sebelum lihat tanda -B dan -C di manual grep.