วิธีรับสองสามบรรทัดจากไฟล์บีบอัด. gz โดยไม่ต้องคลายการบีบอัด


90

จะรับสองสามบรรทัดแรกจากไฟล์ gziped ได้อย่างไร ฉันลอง zcat แต่มันเกิดข้อผิดพลาด

zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.

คำตอบ:


151

zcat(1)สามารถจัดจำหน่ายโดยทั้งหรือโดยการcompress(1) gzip(1)ในระบบของคุณดูเหมือนว่าจะเป็นcompress(1)- กำลังมองหาไฟล์ที่มี.Zนามสกุล

เปลี่ยนไปใช้gzip -cdแทนzcatและคำสั่งของคุณควรทำงานได้ดี:

 gzip -cd CONN.20111109.0057.gz | head

คำอธิบาย

   -c --stdout --to-stdout
          Write output on standard output; keep original files unchanged.  If there are several input files, the output consists of a sequence of independently compressed members. To obtain better compression, concatenate all input files before compressing
          them.

   -d --decompress --uncompress
          Decompress.

7
BTW ถ้าคุณนั่งกับ * .tar.gz สิ่งนี้จะช่วยคุณได้: tar -xzOf some_huge_file.tar.gz | head
demaniak

เธรดเก่า แต่สิ่งนี้สร้างท่อแตกพร้อมสถานะการออก 1 พร้อมไฟล์ gz ขนาดใหญ่ วิธีแก้ปัญหาใด ๆ ที่สะอาด?
kaligne

2
วิธีแก้ปัญหาที่ดีที่สุดและง่ายที่สุดที่ฉันเคยพบ: ใช้zless file.gz | head. zmoreยังคงทำให้คุณท่อแตก zlessดูเหมือนจะเป็นหนทางที่จะไป
kaligne

zless ไม่ออก ... อย่างน้อยก็ไม่ใช่ในไฟล์ขนาดใหญ่ของฉัน ฉันยังคงมองหาวิธีทำโดยไม่มีข้อผิดพลาดท่อแตก ...
Freek



2

หากต้องการช่วงของบรรทัดต่อเนื่องอาจมีทางเลือกหนึ่งดังนี้:

gunzip -c file.gz | sed -n '5,10p;11q' > subFile

ที่เส้นแบ่งระหว่างวันที่ 5 และ 10 เส้น (ทั้งรวม) ของจะถูกดึงเข้าใหม่file.gz subFileสำหรับsedตัวเลือกโปรดดูคู่มือการใช้งาน

ถ้าทุกคนบอกว่าต้องมีบรรทัดที่ 5 :

gunzip -c file.gz | sed -n '1~5p;6q' > subFile

ซึ่งแยกบรรทัดที่ 1 และกระโดดข้าม 4 บรรทัดและเลือกบรรทัดที่ 5 และอื่น ๆ


0

ตัวอย่างข้อมูล awk นี้จะช่วยให้คุณไม่แสดงเพียงสองสามบรรทัดแรกเท่านั้น แต่ยังเป็นช่วงที่คุณระบุได้ด้วย นอกจากนี้ยังจะเพิ่มหมายเลขบรรทัดที่ฉันต้องการสำหรับการดีบักข้อความแสดงข้อผิดพลาดที่ชี้ไปยังบรรทัดที่ต้องการลงในไฟล์ gzipped

gunzip -c file.gz | awk -v from=10 -v to=20 'NR>=from { print NR,$0; if (NR>=to) exit 1}'

นี่คือตัวอย่าง awk ที่ใช้ในหนึ่งซับด้านบน ใน awk NR เป็นตัวแปรในตัว (จำนวนระเบียนที่พบจนถึงปัจจุบัน) ซึ่งโดยปกติจะเทียบเท่ากับหมายเลขบรรทัด ตัวแปร from และ to จะถูกเลือกจากบรรทัดคำสั่งผ่านตัวเลือก -v

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.