ฉันมีไฟล์บันทึกที่ยาวมากเป็นไปได้ไหมที่จะขอให้ grep ค้นหา 10 บรรทัดแรกเท่านั้น
ฉันมีไฟล์บันทึกที่ยาวมากเป็นไปได้ไหมที่จะขอให้ grep ค้นหา 10 บรรทัดแรกเท่านั้น
คำตอบ:
ความมหัศจรรย์ของท่อ
head -10 log.txt | grep <whatever>
head log.txt | grep <whatever>
-l
ตัวเลือกของ grep หรือไม่? ฉันต้องการแสดงรายการไฟล์ทั้งหมดว่าใครเป็น 5 ตัวRIFFD
แรก
สำหรับผู้ที่พบสิ่งนี้ใน Google ฉันจำเป็นต้องค้นหาn
บรรทัดแรกของไฟล์หลายไฟล์ แต่ต้องพิมพ์เฉพาะชื่อไฟล์ที่ตรงกันเท่านั้น ฉันใช้
gawk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' filenames
FNR..nextfile
หยุดการประมวลผลแฟ้มครั้งเดียว 10 คู่สายได้รับการเห็น //..{}
พิมพ์ชื่อไฟล์และย้ายในเมื่อใดก็ตามที่การแข่งขันครั้งแรกในการแสดงได้รับไฟล์จะเพิ่มขึ้น หากต้องการอ้างชื่อไฟล์เพื่อประโยชน์ของโปรแกรมอื่นให้ใช้
gawk 'FNR>10 {nextfile} /pattern/ { print "\"" FILENAME "\"" ; nextfile }' filenames
FNR=1
จะค้นหาบรรทัดที่ 1 ขอบคุณ!
find ./path -type -f -exec awk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' '{}' +
-type f
หรือใช้awk
สำหรับกระบวนการเดียวโดยไม่ต้อง|
:
awk '/your_regexp/ && NR < 11' INPUTFILE
ในแต่ละบรรทัดหากyour_regexp
ตรงกันและจำนวนของเร็กคอร์ด (บรรทัด) น้อยกว่า 11 จะรันแอ็คชันเริ่มต้น (ซึ่งเป็นการพิมพ์บรรทัดอินพุต)
หรือใช้sed
:
sed -n '/your_regexp/p;10q' INPUTFILE
ตรวจสอบ regexp ของคุณและพิมพ์บรรทัด ( -n
หมายถึงอย่าพิมพ์อินพุตซึ่งเป็นค่าเริ่มต้น) และออกจากบรรทัดที่ 10 ทันที
awk '{ if ( NR <= 10 ) { if(index($0,"ab") > 0) { print $0; } } else { exit; } }' textfile
- เร็วขึ้น
awk '{ if ( NR <= 10 ) { if( $0 ~ "YOUR_REGEXP") { print } } else { exit; } }' textfile
ทำ.
awkish
พลัสรูปแบบไม่ได้ 2xifs
และ1xelse
ในคำสั่งที่ไม่จำเป็นต้องมีคำสั่งการดำเนินการใด ๆ จะทำให้ aho weinberger และ kernighan ร้องไห้ ...
grep
คุณมีไม่กี่ตัวเลือกการใช้โปรแกรมพร้อมกับ วิธีที่ง่ายที่สุดในความคิดของฉันคือการใช้head
:
head -n10 filename | grep ...
head
ออกจะ 10 บรรทัดแรก (โดยใช้-n
ตัวเลือก) grep
และจากนั้นคุณสามารถท่อที่ส่งออกไปยัง
head
ได้ใช้-n 10
(รวมทั้งผม)ไม่ทราบว่าhead
โดยเริ่มต้นแสดงเพียง 10 เส้น :)
grep "pattern" <(head -n 10 filename)
คุณสามารถใช้บรรทัดต่อไปนี้:
head -n 10 /path/to/file | grep [...]
เอาต์พุตของhead -10 file
สามารถส่งไปยังgrep
เพื่อให้บรรลุสิ่งนี้:
head -10 file | grep …
ใช้ Perl:
perl -ne 'last if $. > 10; print if /pattern/' file
head -10 log.txt | grep -A 2 -B 2 pattern_to_search
-A 2
: พิมพ์สองบรรทัดก่อนแบบ
-B 2
: พิมพ์สองบรรทัดหลังรูปแบบ
head -10 log.txt # read the first 10 lines of the file.
-C 2
จะทำเช่นเดียวกับ-A 2 -B 2
grep -m6 "string" cov.txt
สิ่งนี้จะค้นหาเฉพาะ 6 บรรทัดแรกสำหรับ string
ส่วนขยายของคำตอบของ Joachim Isaksson: บ่อยครั้งที่ฉันต้องการบางสิ่งจากตรงกลางของไฟล์ยาวเช่นบรรทัด 5001 ถึง 5020 ซึ่งในกรณีนี้คุณสามารถรวมhead
กับtail
:
head -5020 file.txt | tail -20 | grep x
สิ่งนี้จะได้รับ 5020 บรรทัดแรกจากนั้นแสดงเพียง 20 บรรทัดสุดท้ายจากนั้นต่อท่อทุกอย่างเป็น grep
(แก้ไข: ข้อผิดพลาด Fencepost ในหมายเลขตัวอย่างของฉันเพิ่มไปป์ใน grep)
grep -A 10 <รูปแบบ>
นี่คือการจับรูปแบบและ 10 บรรทัดถัดไปหลังจากรูปแบบ วิธีนี้จะใช้ได้ดีเฉพาะกับรูปแบบที่ทราบหากคุณไม่มีรูปแบบที่ทราบให้ใช้คำแนะนำ "head"
ฉันมีปัญหาที่คล้ายกันและปัญหาทั้งหมดข้างต้นไม่สามารถแก้ไขได้ทั้งหมด ฉันยังสนใจที่จะรับชื่อไฟล์ที่มีบรรทัดที่ตรงกัน วิธีแก้ปัญหาของฉัน:
ls |parallel --gnu 'cat <(echo {}) <(head {})|grep -B1 -m1 -P "^>.*F3$"'
หมายเหตุ: รูปแบบในกรณีของฉันจะตรงกับบรรทัดแรกเสมอ
head
:someCmd | head -10