Jika Anda melakukan ini dalam satu lingkaran, saya akan menyarankan sedmetode ini, karena sedjauh lebih kecil (dan memuat lebih cepat) daripada awk.
zrajm
Jawaban:
36
Anda belum mengerti cara awkkerjanya. "Program" yang ditentukan selalu dijalankan satu kali untuk setiap baris (atau "catatan" dalam bahasa awk) dari input, tidak perlu FORatau konstruk yang serupa. Cukup gunakan:
metode verbose
ls -l | awk 'NR>=122 && NR<=129 { print }'
metode yang lebih kompak
ls -l | awk 'NR==122,NR==129'
Seseorang memberi rentang untuk NR, yang merupakan "Nomor Rekaman", biasanya ini adalah baris saat ini awksedang diproses.
Sebenarnya awkkode khas untuk tugas tersebut biasanya ls -l | awk 'NR==122,NR==129'.
manatwork
apa perintah untuk mendapatkan 100 baris terakhir dari file menggunakan awk
Shihabudheen KM
8
Satu lagi metode alternatif adalah menggunakan sed:
ls -l | sed -ne '122,129p'
Tetapi jika, seperti pertanyaan Anda menyarankan, penting untuk menggunakan awk untuk ini, ikuti komentar manatwork pada jawaban Zrajm. Seperti yang dinyatakan oleh dokumentasi awk:
A pattern may consist of two patterns separated by a comma; in thiscase, the action is performed for all lines from an occurrence of the
first pattern though an occurrence of the second.
Jadi jika Anda mau, Anda juga bisa membuat kondisi yang lebih maju. Sebagai contoh:
ls -l | awk 'NR==122,/foobar/'
Ini akan mulai menghasilkan pada baris 122, dan berlanjut sampai baris berisi kata "foobar".
Jika Anda memberi tahu kami kasus penggunaan yang sebenarnya , kami mungkin dapat membantu dengan jawaban yang memberikan solusi yang lebih baik. Saya khawatir ini terdengar seperti masalah XY .
sed
metode ini, karenased
jauh lebih kecil (dan memuat lebih cepat) daripadaawk
.Jawaban:
Anda belum mengerti cara
awk
kerjanya. "Program" yang ditentukan selalu dijalankan satu kali untuk setiap baris (atau "catatan" dalam bahasa awk) dari input, tidak perluFOR
atau konstruk yang serupa. Cukup gunakan:metode verbose
metode yang lebih kompak
Seseorang memberi rentang untuk
NR
, yang merupakan "Nomor Rekaman", biasanya ini adalah baris saat iniawk
sedang diproses.sumber
awk
kode khas untuk tugas tersebut biasanyals -l | awk 'NR==122,NR==129'
.Satu lagi metode alternatif adalah menggunakan
sed
:Tetapi jika, seperti pertanyaan Anda menyarankan, penting untuk menggunakan awk untuk ini, ikuti komentar manatwork pada jawaban Zrajm. Seperti yang dinyatakan oleh dokumentasi awk:
Jadi jika Anda mau, Anda juga bisa membuat kondisi yang lebih maju. Sebagai contoh:
Ini akan mulai menghasilkan pada baris 122, dan berlanjut sampai baris berisi kata "foobar".
Jika Anda memberi tahu kami kasus penggunaan yang sebenarnya , kami mungkin dapat membantu dengan jawaban yang memberikan solusi yang lebih baik. Saya khawatir ini terdengar seperti masalah XY .
sumber
Cara lain untuk melakukan ini (walaupun saya lebih suka
awk
metode ini) menggunakan coreutils:sumber