Você precisa usar a opção unzip
do -c
para descompactar o conteúdo do arquivo .zip para o stdout .... caso contrário, ele descompactará o (s) arquivo (s) no arquivo .zip no disco, e aí não seja nada para canalizar em awk
.
Como muitos programas que se originaram do MS-DOS / Windows em vez do Unix, unzip
também fala sobre o que está fazendo. Os programas Unix geralmente não fazem isso até que você os informe explicitamente com uma opção -v
ou --verbose
ou --debug
ou similar. É uma diferença cultural significativa entre o dos / windows e o software unix. e programadores.
A partir do ponto de vista de qualquer programa que receba entrada em stdin, isso é quase certamente um lixo que irá confundi-lo (é por isso que os programas unix não são detalhados a menos que você diga que eles são). Portanto, diga unzip
para "calar a boca e começar a trabalhar" com a opção -q
(silenciosa) ou -qq
(extra silenciosa).
por exemplo,
unzip -qq -c log.zip | awk -F'- -' '{print $1, $2}' >newfile
BTW, eu mudei seu script awk
ligeiramente. Corrigi o erro de sintaxe pring
. Além disso, o separador de campo de saída padrão ( OFS
) em awk
é um único espaço ... mesmo se você definir o separador de campo de entrada ( FS
) como algo diferente (por exemplo, com -F'- -'
). Por isso, imprimi apenas $1,$2
- não é necessário usar um caractere de espaço com aspas duplas.