Anda juga dapat menyalurkan aliran sewenang-wenang ke head:someCmd | head -10
Stuart Nelson
1
Head default untuk mencetak 10 baris pertama ke output standar, jadi ini berlaku untuk 10 barishead log.txt | grep <whatever>
Zlemini
5
Apakah ada cara untuk melakukan ini saat menggunakan -lopsi grep ? Saya ingin membuat daftar semua file yang terdiri dari 5 karakter pertama RIFFD.
James M. Lay
49
Untuk orang-orang yang menemukan ini di Google, saya perlu mencari nbaris pertama dari beberapa file, tetapi hanya mencetak nama file yang cocok. Saya dulu
Itu FNR..nextfile berhenti memproses file sekali 10 baris telah terlihat. The //..{}cetakan nama file dan bergerak pada setiap kali pertandingan pertama dalam file yang diberikan menunjukkan up. Untuk mengutip nama file untuk kepentingan program lain, gunakan
Saya adalah salah satu orang yang menemukan ini di Google. Terima kasih!
Floris
bagi saya, kode ini mencetak jalur lengkap file. Itulah yang saya butuhkan. Juga FNR=1hanya akan mencari baris pertama. Terima kasih!
Brian W
2
Untuk melakukan ini secara rekursif melalui direktori:find ./path -type -f -exec awk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' '{}' +
OrangeDog
1
Terima kasih @OrangeDog. Satu koreksi kecil: seharusnya-type f
David Siegal
26
Atau gunakan awkuntuk satu proses tanpa |:
awk '/your_regexp/ && NR < 11' INPUTFILE
Di setiap baris, jika your_regexp cocok, dan jumlah record (baris) kurang dari 11, itu mengeksekusi tindakan default (yang mencetak baris input).
Atau gunakan sed:
sed -n '/your_regexp/p;10q' INPUTFILE
Memeriksa regexp Anda dan mencetak baris ( -nartinya jangan mencetak input, yang sebaliknya default), dan berhenti tepat setelah baris ke-10.
Mengapa tidak berhenti pada tanggal 10? (lihat solusi sed)
potong
awk '{ if ( NR <= 10 ) { if(index($0,"ab") > 0) { print $0; } } else { exit; } }' textfile- lebih cepat.
1
@potong Anda benar, dikoreksi. @srikanthradix sementara itu bisa lebih cepat solusinya Anda tidak mencari regexps tetapi hanya untuk string tetap. awk '{ if ( NR <= 10 ) { if( $0 ~ "YOUR_REGEXP") { print } } else { exit; } }' textfiletidak.
Zsolt Botykai
4
Ditambah gayanya tidak awkish. 2xifsdan 1xelsedalam perintah yang tidak membutuhkan pernyataan tindakan akan menjadi aho. weinberger dan kernighan menangis ...
jaypal singh
1
Menurut saya, daripada NR akan lebih baik menggunakan FNR, karena jika Anda menggunakan awk dengan banyak file FNR dimulai dari 0 untuk setiap file.
Vladyslav Savchenko
9
Anda memiliki beberapa opsi menggunakan program bersama grep. Yang paling sederhana menurut saya adalah menggunakan head:
head -n10 filename | grep ...
headakan menampilkan 10 baris pertama (menggunakan -nopsi), dan kemudian Anda dapat menyalurkan output itu ke grep.
Saya bahkan tidak menyadari, semua solusi yang headdigunakan di sini telah digunakan -n 10(termasuk saya) tanpa menyadari bahwa headsecara default hanya menampilkan 10 baris . :)
Tidak, ini akan memberi Anda 6 kemunculan pertama "string" di seluruh file cov.txt
franzisk
2
Perpanjangan dari jawaban Joachim Isaksson: Cukup sering saya membutuhkan sesuatu dari tengah-tengah file yang panjang, misalnya baris 5001 hingga 5020, dalam hal ini Anda dapat menggabungkan headdengan tail:
head -5020 file.txt | tail -20| grep x
Ini mendapatkan 5020 baris pertama, lalu hanya menampilkan 20 baris terakhir, lalu menyalurkan semuanya ke grep.
(Diedit: kesalahan fencepost di nomor contoh saya, menambahkan pipa ke grep)
Ini untuk mengambil pola dan 10 baris berikutnya setelah pola. Ini akan bekerja dengan baik hanya untuk pola yang diketahui, jika Anda tidak memiliki pola yang diketahui, gunakan saran "kepala".
Meski mungkin benar. tambahkan lebih banyak uraian pertanyaan agar jawaban lebih lengkap.
Pramod S. Nikam
3
Ini menjawab pertanyaan yang sama sekali berbeda dan tidak berguna dalam konteks ini.
Pre101
-1
Saya memiliki masalah serupa dan semua masalah di atas tidak menyelesaikannya sepenuhnya. Saya juga tertarik untuk mendapatkan nama file yang berisi baris yang cocok. Solusi saya:
head
:someCmd | head -10
head log.txt | grep <whatever>
-l
opsi grep ? Saya ingin membuat daftar semua file yang terdiri dari 5 karakter pertamaRIFFD
.Untuk orang-orang yang menemukan ini di Google, saya perlu mencari
n
baris pertama dari beberapa file, tetapi hanya mencetak nama file yang cocok. Saya duluItu
FNR..nextfile
berhenti memproses file sekali 10 baris telah terlihat. The//..{}
cetakan nama file dan bergerak pada setiap kali pertandingan pertama dalam file yang diberikan menunjukkan up. Untuk mengutip nama file untuk kepentingan program lain, gunakansumber
FNR=1
hanya akan mencari baris pertama. Terima kasih!find ./path -type -f -exec awk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' '{}' +
-type f
Atau gunakan
awk
untuk satu proses tanpa|
:Di setiap baris, jika
your_regexp
cocok, dan jumlah record (baris) kurang dari 11, itu mengeksekusi tindakan default (yang mencetak baris input).Atau gunakan
sed
:Memeriksa regexp Anda dan mencetak baris (
-n
artinya jangan mencetak input, yang sebaliknya default), dan berhenti tepat setelah baris ke-10.sumber
awk '{ if ( NR <= 10 ) { if(index($0,"ab") > 0) { print $0; } } else { exit; } }' textfile
- lebih cepat.awk '{ if ( NR <= 10 ) { if( $0 ~ "YOUR_REGEXP") { print } } else { exit; } }' textfile
tidak.awkish
.2xifs
dan1xelse
dalam perintah yang tidak membutuhkan pernyataan tindakan akan menjadi aho. weinberger dan kernighan menangis ...Anda memiliki beberapa opsi menggunakan program bersama
grep
. Yang paling sederhana menurut saya adalah menggunakanhead
:head
akan menampilkan 10 baris pertama (menggunakan-n
opsi), dan kemudian Anda dapat menyalurkan output itu kegrep
.sumber
head
digunakan di sini telah digunakan-n 10
(termasuk saya) tanpa menyadari bahwahead
secara default hanya menampilkan 10 baris . :)sumber
Anda dapat menggunakan baris berikut:
sumber
Output dari
head -10 file
dapat disalurkangrep
untuk mencapai ini:Menggunakan Perl:
sumber
-A 2
: cetak dua baris sebelum pola.-B 2
: mencetak dua baris setelah pola.sumber
-C 2
akan melakukan hal yang sama seperti-A 2 -B 2
Ini hanya mencari 6 baris pertama
string
sumber
Perpanjangan dari jawaban Joachim Isaksson: Cukup sering saya membutuhkan sesuatu dari tengah-tengah file yang panjang, misalnya baris 5001 hingga 5020, dalam hal ini Anda dapat menggabungkan
head
dengantail
:Ini mendapatkan 5020 baris pertama, lalu hanya menampilkan 20 baris terakhir, lalu menyalurkan semuanya ke grep.
(Diedit: kesalahan fencepost di nomor contoh saya, menambahkan pipa ke grep)
sumber
grep -A 10 <Pola>
Ini untuk mengambil pola dan 10 baris berikutnya setelah pola. Ini akan bekerja dengan baik hanya untuk pola yang diketahui, jika Anda tidak memiliki pola yang diketahui, gunakan saran "kepala".
sumber
Saya memiliki masalah serupa dan semua masalah di atas tidak menyelesaikannya sepenuhnya. Saya juga tertarik untuk mendapatkan nama file yang berisi baris yang cocok. Solusi saya:
NB: Pola dalam kasus saya selalu cocok dengan baris pertama.
sumber