Posso atualizar meus comandos (como o awk, sed) para a versão mais recente do solaris?

2
 bash-3.00# awk '{print NR}' f1.txt
 1
 2
 3
 4

mas o FNR não imprime nada.

awk '{print FNR}' f1.txt

a linha acima não me dá nenhuma saída, parece que o awk que estou tendo no meu sol não tem variável FNR. então posso fazer algo sobre isso para padronizá-lo. também, posso obter uma biblioteca de todos os comandos mais recentes e instalar / atualizar meus comandos atuais como sed, ordenar etc.

SunOS desconhecido 5.10 Generic_142910-17 i86pc i386 i86pc

    
por munish 27.11.2012 / 13:55

1 resposta

7

Não há apenas um awk e vários lançamentos dele. Existem muitas implementações awk, cada uma com várias versões. Todos os Unices têm seu próprio conjunto de ferramentas que eles mantêm internamente e o software que vem com um Unix e que faz uso dessas ferramentas geralmente dependem daqueles que são a versão exata dessa mesma implementação.

Se você começar a substituir /usr/bin/awk pelo GNU awk, como pode ser baixado do link , você terá problemas.

Alguns Unices fazem o pacote de versões alternativas ou de Software Livre de alguns dos utilitários padrão. Geralmente, eles fazem isso instalando-os em um local diferente ( /opt/gnu , por exemplo, para ferramentas GNU) ou sob um nome diferente ( gawk para o GNU awk). Se não, você pode baixá-los como fonte e criá-los e instalá-los em um local diferente ou com um nome diferente manualmente.

Dito isto, o Solaris é conhecido por ter versões muito antigas e não padrão de alguns utilitários em /usr/bin e manter as versões modernas / padrão em outro lugar.

Esse é o caso do awk. /usr/bin/awk no Solaris é baseado no awk original de 1979. awk foi reescrito em 1988 e chamado nawk . Todas as implementações awk modernas são baseadas nesse nawk (como é o que a especificação POSIX awk é baseada).

No Solaris, se você atualizar seu $PATH para se colocar em um ambiente padrão / POSIX (que geralmente envolve colocando /usr/xpg4/bin e / ou /usr/xpg6/bin no início de $PATH ), então awk será o padrão. Como alternativa, você pode chamar nawk em vez de awk .

É o mesmo para sh , você pode usar /usr/xpg4/bin/sh ou ksh .

Em um sh padrão (ou seja, não /bin/sh no Solaris), você também pode usar

 command -p awk

Certifique-se de chamar o awk portátil em vez do antigo.

    
por 27.11.2012 / 14:09