POSIX cabeça e cauda não apresentam equivalente

3

A documentação da opção -n POSIX tail diz que

The origin for counting shall be 1; that is, -n +1 represents the first line of the file, -n -1 the last.

Portanto, tail -n 10 (usado mais tarde na mesma página) e tail -n -10 devem imprimir as últimas dez linhas, e tail -n +10 ignoraria as nove primeiras linhas e imprimia todo o resto.

A documentação da opção -n do POSIX head diz que

The application shall ensure that the number option-argument is a positive decimal integer.

Portanto, head -n -10 e head -n +10 não são compatíveis com POSIX porque os valores -10 e +10 não são inteiros simples, mas sim sequências sem significado especial no shell, e não há como imprimir todas as linhas até que E último, Por que a discrepância?

PS: head -n +10 funciona com os coreutils GNU.

    
por l0b0 15.05.2013 / 15:57

1 resposta

4

Como ninguém achou que o recurso que você estava procurando valeria a pena ser implementado, não há uma sintaxe para solicitá-lo.

Considere como isso precisaria ser implementado. Primeiro, você teria que procurar até o final do arquivo, digitalizar para trás para descobrir onde a última última linha começa, anotar essa posição, voltar ao início e imprimir as linhas até chegar à posição desejada. lembrei. Isso é muito mais complicado do que o que o head normalmente faz. (Como alternativa, você pode ler todo o arquivo na memória, soltar as últimas N linhas e imprimir o resto.) Mais importante ainda, não funcionaria com fluxos não-visíveis.

Por outro lado, os recursos do tail são bastante simples de implementar. Nunca precisa armazenar mais de N linhas (no caso -n -N ). Para o caso -n +N , basta contar quantas linhas pular antes de começar a imprimi-las.

    
por 15.05.2013 / 17:14

Tags