Jak pobrać kilka pierwszych wierszy z pliku gziped? Próbowałem zcat, ale generuje błąd
zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.
Jak pobrać kilka pierwszych wierszy z pliku gziped? Próbowałem zcat, ale generuje błąd
zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.
Odpowiedzi:
zcat(1)
mogą być dostarczane przez compress(1)
lub przez gzip(1)
. Wygląda na to, że w Twoim systemie compress(1)
szuka pliku z .Z
rozszerzeniem.
Przełącz się gzip -cd
na zamiast, zcat
a twoje polecenie powinno działać poprawnie:
gzip -cd CONN.20111109.0057.gz | head
Wyjaśnienie
-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.
zless file.gz | head
. zmore
nadal pozostawia cię z pękniętą rurą. zless
wydaje się być właściwą drogą.
W niektórych systemach (np. Mac) musisz użyć gzcat
.
Na komputerze Mac musisz użyć <
z zcat:
zcat < CONN.20111109.0057.gz|head
Jeśli potrzebny jest ciągły zakres linii , jedną z opcji może być:
gunzip -c file.gz | sed -n '5,10p;11q' > subFile
gdzie linie między piątą a dziesiątą linią (obie włącznie) file.gz
są wyodrębniane do nowej subFile
. Informacje na temat sed
opcji można znaleźć w instrukcji .
Jeśli każdy, powiedzmy, piąty wiersz jest wymagany:
gunzip -c file.gz | sed -n '1~5p;6q' > subFile
który wyodrębnia pierwszą linię i przeskakuje przez 4 linie, wybiera piątą linię i tak dalej.
Ten fragment kodu awk pozwoli Ci pokazać nie tylko kilka pierwszych wierszy, ale także zakres, który możesz określić. Doda również numery wierszy, których potrzebowałem do debugowania komunikatu o błędzie wskazującego na pewną linię w dół w pliku gzip.
gunzip -c file.gz | awk -v from=10 -v to=20 'NR>=from { print NR,$0; if (NR>=to) exit 1}'
Oto fragment kodu awk użyty w jednej linijce powyżej. W awk NR jest zmienną wbudowaną (liczba dotychczas znalezionych rekordów), która zwykle jest odpowiednikiem numeru wiersza. zmienne od i do są pobierane z wiersza poleceń za pomocą opcji -v.
NR>=from {
print NR,$0;
if (NR>=to)
exit 1
}
tar -xzOf some_huge_file.tar.gz | head