preferências do separador do awk

4

Eu escrevo comandos ad hoc awk no cygwin para processar arquivos delimitados por tabulação. Praticamente todo comando começa com:

BEGIN {FS="\t";OFS="\t";ORS="\r\n";}  

Como posso tornar esses separadores o padrão para evitar digitá-los sempre?

    
por Lobert 12.11.2013 / 09:41

3 respostas

1

Provavelmente, a maneira mais fácil seria usar um alias de shell (adicioná-lo a ~/.bashrc ou equivalente ao seu shell):

alias awktab="awk -v FS='\t' -v OFS='\t' -v ORS='\t'"
    
por 12.11.2013 / 10:39
1

Você também pode adicionar um atalho a ele. Por exemplo, para ter Ctrl + G insira awk -v FS='\t' -v OFS='\t' -v ORS='\t' no seu terminal, adicione esta linha ao seu ~/.inputrc :

Control-G: "awk -v FS='\t' -v OFS='\t' -v ORS='\t'"

Em seguida, abra um novo terminal, digite Ctrl + G e pronto!

    
por 12.11.2013 / 15:19
1

Como o POSIX define quais são os padrões de variáveis especiais , a opção simples é sobrescrevê-los em tempo de execução (a opção não-simples é alterar a fonte).

No caso de gawk , você pode colocar seu código comum (geralmente em BEGIN {} blocks) em um arquivo de biblioteca. Se você colocar esses itens no caminho da biblioteca padrão (provavelmente /usr/share/awk/ ou /usr/local/share/awk ) ou onde a variável de ambiente AWKPATH apontar, não será necessário usar o caminho completo:

gawk -f tabfile.awk [...]

Ao contrário de outros awks, gawk permite várias opções de -f e permite que você misture os dois -f e a origem do programa na linha de comando.

As versões recentes suportam uma opção adicional de arquivo -i include (desde o gawk-4.1.0) e uma diretiva @include (desde 4.0.x AFAICT). Esta é uma versão um pouco mais robusta e amigável de -f :

gawk '@include "tabfile"; /foo/ { ... }'

Os itens acima incluirão tabfile.awk de AWKPATH ou caminho da biblioteca padrão. @include tem sido suportado há muito tempo, mas por meio de um igawk um wrapper de script de shell para gawk , agora é um recurso do gawk.

Isso é compatível com as outras duas boas respostas, por exemplo:

alias awktab="gawk -i tabfile"

Há uma diferença sutil entre usar essa abordagem de arquivo de biblioteca e usar -v na linha de comando: a opção de linha de comando entra em vigor antes que qualquer código awk seja executado, portanto eles são definidos pelo código da biblioteca de tempo. Isso pode ser importante se o código da biblioteca usar essas variáveis (por exemplo, lendo arquivos de dados).

    
por 13.11.2013 / 20:58

Tags