Saya memiliki file log yang sangat panjang, apakah mungkin meminta grep untuk hanya mencari 10 baris pertama?
Saya memiliki file log yang sangat panjang, apakah mungkin meminta grep untuk hanya mencari 10 baris pertama?
Jawaban:
Keajaiban pipa;
head -10 log.txt | grep <whatever>
head log.txt | grep <whatever>
-l
opsi grep ? Saya ingin membuat daftar semua file yang terdiri dari 5 karakter pertama RIFFD
.
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 dulu
gawk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' filenames
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
gawk 'FNR>10 {nextfile} /pattern/ { print "\"" FILENAME "\"" ; nextfile }' filenames
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 |
:
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 ( -n
artinya jangan mencetak input, yang sebaliknya default), dan berhenti tepat setelah baris ke-10.
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
dan 1xelse
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 menggunakan head
:
head -n10 filename | grep ...
head
akan menampilkan 10 baris pertama (menggunakan -n
opsi), dan kemudian Anda dapat menyalurkan output itu ke grep
.
head
digunakan di sini telah digunakan -n 10
(termasuk saya) tanpa menyadari bahwa head
secara default hanya menampilkan 10 baris . :)
grep "pattern" <(head -n 10 filename)
Anda dapat menggunakan baris berikut:
head -n 10 /path/to/file | grep [...]
Output dari head -10 file
dapat disalurkan grep
untuk mencapai ini:
head -10 file | grep …
Menggunakan Perl:
perl -ne 'last if $. > 10; print if /pattern/' file
head -10 log.txt | grep -A 2 -B 2 pattern_to_search
-A 2
: cetak dua baris sebelum pola.
-B 2
: mencetak dua baris setelah pola.
head -10 log.txt # read the first 10 lines of the file.
-C 2
akan melakukan hal yang sama seperti-A 2 -B 2
grep -m6 "string" cov.txt
Ini hanya mencari 6 baris pertama string
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
dengan 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)
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".
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:
ls |parallel --gnu 'cat <(echo {}) <(head {})|grep -B1 -m1 -P "^>.*F3$"'
NB: Pola dalam kasus saya selalu cocok dengan baris pertama.
head
:someCmd | head -10