Як отримати кілька рядків із стисненого файлу .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.

Відповіді:


150

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
До речі, якщо ви сидите з * .tar.gz, це вам допоможе: tar -xzOf some_huge_file.tar.gz | head
demaniak

Старий потік, але це утворює зламану трубу зі статусом виходу 1 із великими файлами gz. Чистий обхідний шлях?
kaligne

2
Найкращий та найпростіший обхідний шлях, який я знайшов на даний момент: використання zless file.gz | head. zmoreвсе ще залишає вас зі зламаною трубою. zlessздається, це шлях.
kaligne

zless не виходить ... принаймні не в моєму великому файлі. Я все ще шукаю спосіб зробити це без помилок зі зламаною трубою ...
Фрік,



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 дозволить вам показати не лише кілька перших рядків, але і діапазон, який ви можете вказати. Він також додасть номери рядків, які мені потрібні для налагодження повідомлення про помилку, що вказує на певний рядок вниз у файлі зі згорнутим архівом.

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

Ось фрагмент awk, використаний у одному вкладеному вище. В awk NR - це вбудована змінна (Кількість записів, знайдених дотепер), яка зазвичай еквівалентна номеру рядка. змінна від і до вибирається з командного рядка за допомогою параметрів -v.

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.