Bash: Como criar um alias em .bashrc para awk com parâmetros

1

Estou tentando adicionar um alias no arquivo .bashrc da seguinte forma:

...
alias cutf="_cutf"
...
_cutf() {
   awk 'NR >= $2 && NR <= $3 { print }' < $1
}

(O objetivo da função é mostrar o conteúdo das linhas cujo número está entre $ 2 e $ 3 para o arquivo $ 1)

Quando eu ligo para cutf em uma nova sessão de bash, não recebo saída.

Estou sentindo falta de algo?

    
por Diego Alcántara 09.03.2015 / 15:02

2 respostas

2

$ 2 e $ 3 estão entre aspas simples. O shell não expande variáveis entre aspas simples, por isso elas são interpretadas por awk . Alterne para aspas duplas:

awk "NR >= $2 && NR <= $3 { print }" < "$1"

Note que você pode conseguir o mesmo com

sed -n 'X,Yp' file

onde X e Y são os números de linha, ou similarmente em Perl com

perl -ne 'print if X .. Y' file

que são tão curtos que você provavelmente não precisa de uma função para eles.

    
por 09.03.2015 / 15:10
1

Você não deve permitir que o shell expanda variáveis dentro de sua instrução awk. Variáveis como $ 2 e $ 3 têm um significado especial dentro do awk.

_cutf() {
   awk -v start="$2" -v stop="$3" 'NR >= start && NR <= stop { print }' "$1"
}

ou você pode escrever assim

_cutf() {
   awk 'NR >= start && NR <= stop { print }' start="$2" stop="$3" "$1"
}
    
por 09.03.2015 / 15:49