impressão em um laço

1. impressão em um laço

thiago
lacerdat25

(usa Red Hat)

Enviado em 03/03/2021 - 01:19h

Olá,

Estou criando um script que lê um arquivo de texto linha por linha, num total de 23 linhas. Cada linha tem o nome de um serviço, o mesmo segue um padrão especifico. Estou realizando essa leitura com um laço for. O problema e que como cada nome de serviço tem um espaço o laço quebra o nome do arquivo, e da erro.

Ex. nome de um serviço: Servico - 571.zip

arquivo=$(cat arquivo.txt | awk -F" " '{print $1" "$2" "$3}')
for i in $arquivo;
do
echo $i
done

Preciso colocar o nome em um laço, pois a cada execução, será chamada uma API passando como parametro o nome do serviço.

Alguem pode me dar uma luz please?

Obrigado!


  


2. Re: impressão em um laço

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/03/2021 - 03:21h

lacerdat25 escreveu:

Olá,

Estou criando um script que lê um arquivo de texto linha por linha, num total de 23 linhas. Cada linha tem o nome de um serviço, o mesmo segue um padrão especifico. Estou realizando essa leitura com um laço for. O problema e que como cada nome de serviço tem um espaço o laço quebra o nome do arquivo, e da erro.

Ex. nome de um serviço: Servico - 571.zip

arquivo=$(cat arquivo.txt | awk -F" " '{print $1" "$2" "$3}')
for i in $arquivo;
do
echo $i
done

Preciso colocar o nome em um laço, pois a cada execução, será chamada uma API passando como parametro o nome do serviço.

Alguem pode me dar uma luz please?

Obrigado!


Alternativa:
Use o DESCRITOR de ARQUIVOS:
Sintaxe:
exec 3< <(cat arquivo.txt);
while read line <&3;
do echo \"${line// /\\ }\"; done;
exec 3<&-

----------------------------------------------------------
Att.: Marcelo


3. impressão em um laço

thiago
lacerdat25

(usa Red Hat)

Enviado em 03/03/2021 - 10:46h

msoliver,

Funcionou! Muito obrigado!

Me tira uma duvida por favor, como eu faço para tirar o espaço de um dos lados?

Ex. nome de um serviço: Servico - 571.zip

NOVO EX:
Ex. nome de um serviço: Servico -571.zip

Tire o espaço do lado esquerdo.

Sou novo no mundo do bash, preciso aprender essa parte de regex, ainda é um bicho de 7 cabeças.

Muito obrigado!


4. Re: impressão em um laço

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/03/2021 - 18:47h


lacerdat25 escreveu:

msoliver,

Funcionou! Muito obrigado!

Me tira uma duvida por favor, como eu faço para tirar o espaço de um dos lados?

Ex. nome de um serviço: Servico - 571.zip

NOVO EX:
Ex. nome de um serviço: Servico -571.zip

Tire o espaço do lado esquerdo.
Sou novo no mundo do bash, preciso aprender essa parte de regex, ainda é um bicho de 7 cabeças.
Muito obrigado!

Boa noite Lacerda!
Segue, usando recursos do proprio "bash".
servico=' Servico - 571.zip '
echo "[${servico}]" #coloquei os colchetes para visualizar os espaços nas bordas.
[ Servico - 571.zip ]
echo "[${servico/- /-}]" #Troca "- " por "-"
[ Servico -571.zip ]
echo "[${servico// /}]" #Elimina todos espaços
[Servico-571.zip]
Usando o 'SED'
[email protected]:$ &#9492;&#9472;> sed 's/ //' <<< "[${servico}]" #tira o 1º espaço
[Servico - 571.zip ]
[email protected]:$ &#9492;&#9472;> sed 's/ //2' <<< "[${servico}]" #2º
[ Servico- 571.zip ]
[email protected]:$ &#9492;&#9472;> sed 's/ //3' <<< "[${servico}]"
[ Servico -571.zip ]
[email protected]:$ &#9492;&#9472;> sed 's/ //4' <<< "[${servico}]"
[ Servico - 571.zip]
[email protected]:$ &#9492;&#9472;> sed 's/ //g' <<< "[${servico}]" #Apaga Todos
[Servico-571.zip]
Com o 'tr'
tr -d " " <<< "[${servico}]"
-----------------------------------------------------------------------------------------------------
[Servico-571.zip]
[email protected]:$ &#9492;&#9472;> Isso é o prompt, fiquei com preguiça de apagar.... :)

Não Esqueça de marcar a MELHOR RESPOSTA, quando o Tópico for RESOLVIDO.....


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.


______________________________________________________________________



5. Re: impressão em um laço

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/03/2021 - 02:40h

msoliver escreveu:

Alternativa:
Use o DESCRITOR de ARQUIVOS:
Sintaxe:
exec 3< <(cat arquivo.txt);
while read line <&3;
do echo \"${line// /\\ }\"; done;
exec 3<&-


Um pouco melhor:
exec 3< arquivo.txt  # Ou seja: não precisa de “cat” para ler diretamente o conteúdo de um arquivo, economizando um processo.
while read -u 3 line; do # Usa diretamente o descritor 3, em lugar de salvar o descritor 0 num reserva, redirecionar o 3 para 0, e depois redirecionar o reserva para o 0 e finalmente fechar o reserva.
echo \""${line// /\\ }"\"
done
exec 3<&-


Mais do que isso, se a ideia original é separar pedaços e depois os juntar novamente, pode-se fazer algo como o seguinte.
exec 3< arquivo.txt
while read -u 3 parte1 parte2 parte3 resto; do
echo "Exemplo juntando com hífens e ordem inversa: $parte3-$parte2-$parte1"
done
exec 3<&-



... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts