Разархивируйте файл и обработайте его содержимое с помощью AWK и каналов

Я бы предположил, что есть только несколько TZ, которые вам часто нужно проверять. Исходя из этого предположения, вы, вероятно, сочтете полезным настроить псевдонимы или функции для каждого TZ, который вам нужно проверить. Псевдоним - это просто...

alias est="TZ=US/Eastern date"

Определение функции выглядит следующим образом...

est() { TZ=US/Eastern date ; }

Определение функций для каждого TZ будет иметь дополнительное преимущество в том, что изменение будет изолировано от TZ. Это означает, что значение, присвоенное TZ, исчезнет при завершении функции и вернется к исходному значению, когда вы вернетесь в свою оболочку.

Чтобы сделать одну из этих функций доступной при каждом входе в систему, вам нужно включить ее в ~/.bash_profile. Как только вы установили один из этих параметров, откройте новую оболочку или выйдите/зайдите в систему, затем получите дату/время с помощью est.

0
20.02.2018, 10:38
2 ответа

Puedes hacer esto:

awk -F "--" '{print $1 " "$2}' <(gzip -dc log.zip)

El comando gzip usa las opciones -dy -c.

    -c --stdout --to-stdout
          Write output on standard output
    -d --decompress --uncompress
          Decompress.

Por supuesto, puede usar la redirección estándar para enviar la salida a un archivo

awk -F "--" '{print $1 " "$2}' <(gzip -dc log.zip) > my_out_file

Como señaló Cas en los comentarios, gzip funciona para la mayoría de los archivos.zip, pero no se garantiza que funcione con todos ellos, puede usar unzipcon este comando.

awk -F "--" '{print $1 " "$2}' <(unzip -cq log.zip) > my_out_file

Las opciones son ligeramente diferentes pero el resultado es el mismo.

0
28.01.2020, 02:32

Debe usar la opción unzip's -cpara descomprimir el contenido del archivo.zip a la salida estándar.... de lo contrario, descomprimirá el archivo (s )en el archivo.zip en el disco, y no habrá nada a lo que canalizar awk.

Al igual que muchos programas que se originaron en MS -DOS/Windows en lugar de Unix, unziptambién habla mucho sobre lo que está haciendo. Los programas de Unix generalmente no hacen eso hasta que usted les dice explícitamente que lo hagan con una opción -vo --verboseo --debugo similar. Es una diferencia cultural significativa entre dos/windows y el software de Unix. y programadores.

Desde el punto de vista de cualquier programa que recibe entrada en stdin, es casi seguro que es basura que lo confundirá (es por eso que los programas de Unix no son detallados a menos que les diga que lo sean ). Así que dile a unzipque "simplemente cállate y ponte a trabajar" con la opción-q(silenciosa )o-qq(extra silenciosa ).

por ej.

unzip -qq -c log.zip | awk -F'- -' '{print $1, $2}' >newfile

Por cierto, he cambiado ligeramente tu script awk. Arreglé el error de sintaxis pring. Además, el separador de campo de salida predeterminado(OFS)en awkes un solo espacio... incluso si configura el separador de campo de entrada(FS)en otra cosa (, p. con-F'- -'). Así que simplemente imprimí$1,$2-sin necesidad de usar un carácter de espacio entre comillas doble -.

4
28.01.2020, 02:32

Теги

Похожие вопросы