awk
é bom para isso, mas você pode fazer isso de maneira mais simples, com
calcc() {
awk "{\$$1=$2;print}" | column -t
}
Se isso é melhor ou não, é sua escolha.
Eu regularmente preciso aplicar fórmulas simples para inserir dados em formato de tabela textual.
No começo, escrevi pequenas funções específicas para cada caso de uso. Então eu repassei o "código comum" em uma função bash. Isso funciona bem, mas se sente abaixo do ideal.
Aqui está minha "solução antiga", percorrendo todos os campos, verificando / reagindo:
calcc(){
awkcmd='{for (i=1;i<=NF;i++){if (i==col) printf "%s ",'
awkcmd+="$2"
awkcmd+='; else printf "%s ", $i ;}; print "";}'
awk -v col=$1 "$awkcmd" | column -t
}
Exemplo de uso contratado:
"Substitua groupName (Column4) em ls -l
-output pelo quadrado do dayNumber (Column7)"
$ ls -l | calcc 4 '$7*$7'
Existe uma maneira melhor, ou uma ferramenta (POSIX) que até agora escapou da minha pesquisa?
EDIT: @ RalphRönnquist apontou, que $1..$n
são graváveis, e assim poderia propor uma versão muito mais curta. Como print
é a ação awk
padrão, isso pode ser reduzido ainda mais. == >
$ calcc() { awk "\$$1=$2" | column -t; }
$ calcc-nc() { awk "\9=$1" | column -t; }
A segunda função adiciona um n e c olumn ao final com o resultado do cálculo.
Tags text-processing awk shell