- Gerar link
- X
- Outros aplicativos
Postagem em destaque
- Gerar link
- X
- Outros aplicativos
Em shell script a programação se resume em tratamento e manipulação de dados exibidos na saída padrão ou por atribuição direta a uma variável, principalmente em casos onde os dados são dinâmicos, ou seja, sendo necessário extrair uma determinada coluna ou campo. A importância no conhecimento e domínio dos comandos para tal implementação é de suma importância já que tais dados serão tratados posteriormente por outras rotinas para validação.
Vou apresentar alguns exemplos com diferentes implementações das quais vou utilizar o conteúdo do arquivo usuarios.txt, cujas as linhas contém as informações de cada usuário no seguinte formato:
O último campo requerido contém o nome da cidade.
Conteúdo:
Note que os campos são delimitados pelo caractere ',' (vírgula).
Vale a pena ressaltar que os métodos a seguir podem ser aplicados a um número indeterminado de campos, já que o propósito é tratar e extrair apenas o último elemento em uma cadeia dinâmica de dados, que ao contrário do conteúdo utilizado a quantidade já está pré determinada e que pode ser facilmente especificada.
Todos os métodos abaixo tem o mesmo afeito e retornam a seguinte saída:
nome, sobrenome, idade, cidade
Conteúdo:
$ cat usuarios.txt Marcia,Nogueira,42,Osasco Lucas,Silva,23,Campo Grande Fernanda,Lopes,34,Arantina Jonas,Ferreira,31,Juiz de Fora Marcia,Rodrigues,53,Salvador Jessica,Alves,21,Manaus
Vale a pena ressaltar que os métodos a seguir podem ser aplicados a um número indeterminado de campos, já que o propósito é tratar e extrair apenas o último elemento em uma cadeia dinâmica de dados, que ao contrário do conteúdo utilizado a quantidade já está pré determinada e que pode ser facilmente especificada.
Todos os métodos abaixo tem o mesmo afeito e retornam a seguinte saída:
Osasco Campo Grande Arantina Juiz de Fora Salvador Manaus
Métodos:
1. Obtendo a quantidade total de delimitadores por linha.
#!/bin/bash # Lê cada linha do arquivo e armazena em 'line'. while read line; do # Remove todos os caracteres exceto o delimitador ',' (vírgula) delm=${line//[^,]/} # Incrementa +1 a quantidade de delimitadores presentes # em 'delm' para obter o número do último campo. cut -d',' -f $((${#delm}+1)) <<< "$line" done < usuarios.txt
2. Utilizando expansão de variáveis
#!/bin/bash while read line; do # Remove todos os caracteres iniciais até o último delimitador. echo "${line##*,}" done < usuarios.txt
3. Utilizando o comando awk.
#!/bin/bash # Imprime o contéudo do argumento posicional contido na posição 'NF'. awk -F',' '{print $NF}' usuarios.txt
4. Aplicando uma simples expressão regular com o comando grep.
#!/bin/bash # Captura somente a expressão ao final da linha. (exceto o delimitador) grep -Eo '[^,]+$' usuarios.txt
5. sed (o mesmo que o método 2).
#!/bin/bash # Remove todo conteúdo inicial até o delimitador (inclusive). sed 's/^.*,//' usuarios.txt
6. Utilizando a função string.field da biblioteca string.sh.
#!/bin/bash # Importando source string.sh # Utiliza-se notação negativa para deslocamento reverso dos campos, # onde '-1' refere-se ao último campo. string.field "$(< usuarios.txt)" ',' -1
A função string.field aceita o uso de notação negativa para leitura reversa dos campos, onde '-1' refere-se ao último, '-2' penúltimo, '-3' antepenúltimo e assim por diante, permitindo a captura independente da quantidade de campos presentes.
Considerações finais:
- O Delimitador deve ser um caractere único.
- Substitua o delimitador ',' (vírgula) utilizado nos métodos acima pelo caractere de sua preferência.
- Gerar link
- X
- Outros aplicativos
Comentários
Postar um comentário