cygwin awk output para os delímetros de linha do windows

2

Consegui encontrar a maneira de imprimir a lista de entradas de zip e encaminhar para um arquivo txt.

unzip -l my.zip | awk '{print $4}' > my.txt

Quando abro o arquivo my.txt no bloco de notas do Windows, os delimitadores de linha são ignorados e todas as linhas são renderizadas em uma única linha.

Como posso fazer com que essas linhas canalizadas tenham delimitadores de linha apropriados?

    
por Jin Kwon 09.08.2014 / 12:47

2 respostas

2

A saída de cada linha processada awk é terminada em um avanço de linha ( \n ) que é o padrão Unix / Linux. Windows / DOS espera um retorno de carro seguido por um avanço de linha para marcar o final da linha ( \r\n ). notepad exibirá todos os arquivos gerados pelo Linux como você está vendo atualmente.

Para resolver, canalize a saída de awk por meio do comando unix2dos , que converte n s em \r\n s para você:

unzip -l my.zip | awk '{print $4}' |unix2dos > my.txt

Como alternativa, tente informar awk para a saída \r\n no final de cada linha usando a variável ORS :

unzip -l my.zip | awk -v ORS='\r\n' '{print $4}' > my.txt

Para listar sem cabeçalho e rodapé:

unzip -l my.zip | awk -v ORS='\r\n' '{print $4}' | tail -n +4 | head -n -2 > my.txt

Ou

Como alternativa, use zipinfo -1 <zip file> (número 1, não letra l) para listar arquivos sem cabeçalho e rodapé. Talvez você ainda precise canalizá-lo por unix2dos . Útil somente se zipinfo estiver disponível no CygWin.

    
por 09.08.2014 / 13:09
0

Consegui converter os delimitadores de linha do arquivo de saída em um estilo com unix2dos .

$ unix2dos my.txt
unix2dos: converting file cdc_1.1.jar.txt to DOS format...
    
por 09.08.2014 / 13:08