segunda-feira, 9 de dezembro de 2019

Trabalhando com array, no shell script.


O uso dos arrays em programação é muito comum e muito util. Por isso criei esse artigo explicando como usa-los no shell. Arrays são vetores, eles são chamados via o indice, sempre iniciando no indice 0. Seguem alguns exemplos de como trabalhar como ele.

Segue abaixo um artigo muito interessante, para a demonstração de vetores com python.

Criando um array e executando um "append"(incrementando) com a leitura do terminal. A mesma execução vale para inserção 
#!/usr/bin/env /bin/bash
echo "escolha um numero" read a array[0]="$a" echo "escolha outro numero" read b array[1]="$b" echo ${array[@]}
output:
escolha um numero
1
escolha outro numero
bazinga
1 bazinga
Criando um array, adicionando posições e alterando as posições criadas.
#!/usr/bin/env /bin/bash
array[0]="1"
array[1]="2"
echo ${array[@]}
array[2]="3"
echo ${array[@]}
array[2]="bazinga"
echo ${array[@]}
output:
1 2
1 2 3
1 2 bazinga

Criando um array e exibindo num loop(for) no shell.

#!/usr/bin/env bash
#Autor: Rodrigo Cunha
#Projeto: poc
Array=('200' '301' '400' '501')

for x in ${Array[@]};
do
echo $x
done
Ou via pipeline:

$Array=('200' '301' '400' '501' 'Bazinga') && for i in ${array[@]};do echo $i;done
Tem um uso interessante para testar varios

Pegando o tamanho(leng) do array, no linux.
array=("1" "2" "bazinga") && tarray=${#array[@]} && echo $tarray

#!/usr/bin/env bash
#Autor: Rodrigo Cunha
#Projeto: poc
Array=('200' '301' '400' '501' 'bazinga')
## pega o tamanho do array
size=${#array[@]}
## Utilizando o loop.
for (( i=0; i<$size; i++ ))
do echo "${array[$i]}"
done

##TODO
Criar via while.
#!/usr/bin/env bash
#Autor: Rodrigo Cunha
#Projeto: poc
array=('200' '301' '400' '501' 'Bazinga')

count=tarray=${#array[@]}
contador=0
while [  $contador -bt $count ]; do
      echo ${array[$contador]}
      echo "$contador";
      let contador = contador+1; 
done

##DONE
Um método interessante de se trabalhar no shell, é trabalhar com funções.
#!/usr/bin/env bash
#Autor: Rodrigo Cunha
#Projeto: poc-array
array=('200' '301' '400' '501')

function main(){
for i in ${array[@]}
do
echo $i
done
}
main

Bibliografia:
Referencias:







sexta-feira, 6 de dezembro de 2019

AWK:Processando avançado de textos

Documento:
~
Maria da Silva;DP RJ
Ana dos Santos Souza;DP SP
~
Output desejado:
-
Maria Silva RJ
Ana Souza SP
-
Problema: Eu preciso utilizar o primeiro e o ultimo nome dos usurios bem como o estado correspondente.

Solução com AWK:
$ awk -F '[[:blank:];]+' '{ print $1, $(NF-2), $NF }' doc
~
Maria Silva RJ
Ana Souza SP
~
Suporte: Itamar, telegram.
Dificuldade :Ainda não entendi o uso do Field  '[[:blank:];]+'
Aprendizado: O $NF significa a posição na linha do caracter, no caso $(NF-2) significa Numero-2.

Antes dessa solução, tentamos uma solução utilizando o comando:
$ awk -F '[ ;]+' '{ print $1, $(NF-2), $NF }'
Não compreendi o uso da expressão regular
<code>
'[ ;]+'
</code>